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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:07