You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用任何库实现十进制数转BCD码的功能

无依赖十进制转BCD码实现方案

核心实现逻辑

  • 完全移除bitset库依赖,通过位运算直接判断单个十进制数字(0-9)对应的4位二进制位,不需要引入任何第三方库
  • 保留原有翻转数字保证输出顺序正确的逻辑,仅替换二进制位生成部分的代码
  • 修正原代码返回值不匹配的问题,可根据需求选择返回字符串或者直接输出结果

无任何库依赖的实现代码

该版本不需要引入任何标准库,直接返回BCD字符串:

// 入参为待转换的非负十进制整数,返回值为空格分隔的4位BCD码字符串
const char* decimal_to_bcd(int num) {
    // 静态缓冲区足够存储最大32位int的BCD结果(10位数字对应10*4位+9个空格共49字节)
    static char bcd_buf[64] = {0};
    int write_pos = 0;

    // 处理输入为0的特殊情况
    if (num == 0) {
        bcd_buf[0] = '0'; bcd_buf[1] = '0';
        bcd_buf[2] = '0'; bcd_buf[3] = '0';
        bcd_buf[4] = '\0';
        return bcd_buf;
    }

    int rev_num = 0;
    // 翻转数字保证后续BCD位输出顺序正确
    while (num > 0) {
        rev_num = rev_num * 10 + (num % 10);
        num /= 10;
    }

    // 逐位转换为4位BCD码
    while (rev_num > 0) {
        int digit = rev_num % 10;
        // 从高位到低位逐位输出4位二进制
        for (int i = 3; i >= 0; i--) {
            bcd_buf[write_pos++] = (digit & (1 << i)) ? '1' : '0';
        }
        rev_num /= 10;
        // 非最后一位添加空格分隔
        if (rev_num > 0) {
            bcd_buf[write_pos++] = ' ';
        }
    }
    bcd_buf[write_pos] = '\0';
    return bcd_buf;
}

如果需要和原代码逻辑一致直接打印结果,可以使用以下版本:

#include <iostream>
using namespace std;

void decimal_to_bcd(int num) {
    if (num == 0) {
        cout << "0000";
        return;
    }

    int rev_num = 0;
    while (num > 0) {
        rev_num = rev_num * 10 + (num % 10);
        num /= 10;
    }

    while (rev_num > 0) {
        int digit = rev_num % 10;
        for (int i = 3; i >= 0; i--) {
            cout << ((digit & (1 << i)) ? '1' : '0');
        }
        rev_num /= 10;
        if (rev_num > 0) {
            cout << ' ';
        }
    }
}

内容的提问来源于stack exchange,提问作者ehsan Muhammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:24:03