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

C语言实现Decimal to octal converter输出反向的解决方法问询

C语言十进制转八进制结果反向问题修复方案

问题原因

你的代码中每次通过q%8计算得到的是八进制数的最低位,直接按计算顺序打印会导致结果倒置,比如输入十进制10时会输出21,而非正确的八进制结果12。

修复方案(存储后反转输出)

你可以用一个整型数组存储每一步计算出的余数与最终的商,最后倒序输出数组内容即可得到正确结果,参考实现代码如下:

#include <stdio.h>

int main(){
    int n;
    printf("Enter the integer: ");
    scanf("%d",&n);
    // 兼容负数输入,不需要可删除本段
    if(n < 0) {
        printf("-");
        n = -n;
    }
    int q = n;
    // 32位整型转八进制最多11位,开20位数组足够存储
    int oct_bits[20], count = 0;

    if (n < 8) {
        oct_bits[count++] = n;
    } else {
        while(q >= 8) {
            int r = q % 8;
            q = q / 8;
            oct_bits[count++] = r;
        }
        oct_bits[count++] = q;
    }

    // 倒序输出所有位得到正确结果
    for(int i = count - 1; i >= 0; i--) {
        printf("%d", oct_bits[i]);
    }
    return 0;
}

可选简化方案(递归实现)

你也可以通过递归利用函数调用栈的先进后出特性,无需手动定义存储数组即可实现正序输出:

#include <stdio.h>

void dec_to_oct(int num) {
    if(num >= 8) {
        dec_to_oct(num / 8);
    }
    printf("%d", num % 8);
}

int main(){
    int n;
    printf("Enter the integer: ");
    scanf("%d",&n);
    if(n < 0) {
        printf("-");
        n = -n;
    }
    dec_to_oct(n);
    return 0;
}

内容的提问来源于stack exchange,提问作者Eyy boss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:02