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

十进制转二进制代码异常求助:输入13输出1100而非预期1101

十进制转二进制代码输出错误:输入13得到1100而非1101的解决方法

你的代码核心问题出在**pow()函数的浮点数精度误差**上:

  • pow()是用于浮点数运算的标准库函数,返回double类型值。当计算pow(10, i)时,比如pow(10,3),实际得到的可能不是精确的1000,而是类似999.9999999999999的近似值。
  • 当这个近似值乘以n%2的结果(这里是1)后,再与整数binary相加时,会发生浮点数到整数的截断,相当于只加了999而非1000,最终导致结果比预期少1000,出现1100而非1101的错误。

修复方案1:用整数乘法替代pow()(推荐)

通过维护一个整数变量来记录10的幂次,完全避免浮点数运算的精度问题:

#include <iostream>

using namespace std;

int main(){
    int n;
    cout << "Enter decimal number: ";
    cin >> n;
    
    int binary = 0;
    int power = 1; // 初始为10^0,每次循环乘10提升幂次
    
    while(n != 0){
        binary += power * (n % 2);
        n /= 2;
        power *= 10;
    }
    
    cout << "Equivalent binary is: " << binary;
}

修复方案2:修正pow()的精度误差

如果坚持使用pow(),可以通过round()函数对结果进行四舍五入,确保得到精确的整数值:

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    int n;
    cout << "Enter decimal number: ";
    cin >> n;
    
    int binary = 0;
    int i = 0;
    
    while(n != 0){
        // 用round修正pow的精度偏差
        binary += round(pow(10, i)) * (n % 2);
        n /= 2;
        i++;
    }
    
    cout << "Equivalent binary is: " << binary;
}

你手动追踪时得到正确结果,是因为默认假设pow(10,i)返回精确整数,但实际代码中浮点数的精度特性打破了这个假设。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:40:35