C语言中不使用数组和指针如何反向打印进制转换的输出结果?
C语言十进制转2~16进制迭代函数修正方案
核心思路
你原来的代码逆序输出的原因是每次先计算并打印最低位的余数,自然会从低位往高位输出。由于要求不能使用数组、指针,我们可以先计算出目标进制下的最高位位权,再从最高位到最低位依次计算每一位的数值并打印,完全用纯数值运算实现正序输出。
修正后代码
void base_conversion_it(unsigned int n, unsigned int b) { // 先校验进制合法性 if (b < 2 || b > 16) { return; } // 处理输入为0的特殊情况 if (n == 0) { printf("0"); return; } // 第一步:计算最高位的位权 unsigned int weight = 1; while (weight <= n / b) { // 用n/b避免weight*b溢出 weight *= b; } // 第二步:从最高位到最低位依次打印 while (weight > 0) { int current_digit = n / weight; printf("%X", current_digit); n = n % weight; weight /= b; } }
关键逻辑说明
- 计算位权时用
weight <= n / b代替weight * b <= n,可以避免无符号整数乘法溢出的问题,兼容性更强 - 额外覆盖了输入
n=0的边界场景,原来的代码输入0时无任何输出,符合进制转换的常规要求 - 全程仅使用基础数值变量,没有用到数组、指针,完全符合作业限制要求
内容的提问来源于stack exchange,提问作者Foxen
相关产品推荐
相关产品推荐

