如何不使用任何库实现十进制数转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
相关产品推荐
相关产品推荐

