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

C++十进制转二进制程序:输入5-7失效,大于7正常?

问题原因

你这段代码的问题出在pow(10,i)的使用上。pow是C标准库的浮点运算函数,返回double类型值。由于浮点数的精度限制,当计算pow(10,2)时,实际得到的可能不是精确的100,而是类似99.9999999999的数值。转成int类型时会直接截断小数部分变成99,最终导致二进制结果计算出错。

比如输入5(二进制应为101),第三次循环时i=2,pow(10,2)返回近似99.999999,转int后是99,ans = 1*99 +1 =100,结果就错了。而数值大于7时,比如8(二进制1000),i到3,pow(10,3)的精度误差刚好没影响(比如返回1000.0),所以结果看起来正常,但这只是巧合,写法本身存在本质隐患。

修复方案

把浮点运算的pow换成整数方式计算位权,用整型变量维护当前位权值,每次循环后乘以10即可,全程整数运算不会有精度问题。

修复后的代码:

#include<iostream>
using namespace std;
int main()
{   
    int n;
    cout << "Decimal : ";
    cin >> n;
    int ans = 0;
    int place = 1; // 替代pow计算位权
    while(n != 0)
    {
        int bit = n % 2;
        ans = (bit * place) + ans;
        n = n / 2;
        place *= 10; // 位权每次乘10
    }
    cout << "Binary : " << ans; 
}
额外说明

原代码中的math.h头文件已经不需要,可以直接删除,减少不必要的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:22:33