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

C语言十进制转八进制代码输出异常,请求排查错误原因

十进制转八进制代码的错误分析

你的代码存在三个关键问题,直接导致输出结果异常:

  • octal变量未初始化:C语言中局部变量默认是栈内存里的随机垃圾值,你没有给octal设置初始值0,后续所有计算都会基于这个无意义的垃圾值累加,结果必然错误。
  • 误用pow函数引发精度问题:pow是浮点运算函数,返回double类型值。计算10的整数次幂时,可能出现浮点精度误差(比如pow(10,1)实际可能是9.9999999999),和整数相乘后强制转换为int会丢失精度,彻底破坏转换逻辑。
  • i的初始值错误:第一次循环得到的余数是八进制的最低位,对应位权是10^0(即1),但你的i初始值设为1后,第一次计算用的是10^1,位权完全错位。

修正后的代码

我们可以通过初始化变量、用整数乘法替代浮点函数pow、修正位权初始值来解决问题:

// 十进制转八进制
#include <stdio.h>

int main()
{
    int num, r = 0, octal = 0, i = 1;

    printf("请输入要转换为八进制的数字: ");
    scanf("%d", &num);

    while (num)
    {
        r = num % 8;
        octal = octal + r * i; // 用整数i累计位权,避免浮点误差
        i *= 10;               // 每次循环位权乘以10
        num = num / 8;
    }
    printf("对应的八进制数是 %d", octal);
    return 0;
}

输入16时,计算过程如下:

  1. num=16,r=16%8=0,octal=0+0*1=0,i=10,num=2
  2. num=2,r=2%8=2,octal=0+2*10=20,i=100,num=0
    最终输出正确结果20。

内容的提问来源于stack exchange,提问作者ARPIT SINGH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:57