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时,计算过程如下:
- num=16,r=16%8=0,octal=0+0*1=0,i=10,num=2
- num=2,r=2%8=2,octal=0+2*10=20,i=100,num=0
最终输出正确结果20。
内容的提问来源于stack exchange,提问作者ARPIT SINGH
相关产品推荐
相关产品推荐

