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

C++十进制出生年份转二进制结果异常问题求助

问题原因分析
  • 核心问题是i变量的类型溢出:你声明的i是int类型,32位int的取值上限通常是2147483647。2001的二进制有11位,循环过程中i会累乘到10^10 = 10000000000,远大于int的最大值,发生整数溢出后i的值变成异常数值,最终计算出来的bin自然出错。
  • 日、月转换正常是因为这两个数值最大只有31,二进制最多5位,i最大只到10000,远没有超出int的取值范围,所以不会触发溢出问题。
修复方案

只需要把i的类型修改为long long即可,修改后的代码片段如下:

{
    long long i, temp, bin; // 把i的类型从int改为long long

    i = 1;
    bin = 0;
    
    printf("Number %d in binary: \n", year);
    while (year > 0) {
        temp = year % 2;            
        year /= 2;              
        bin += temp * i;        
        i *= 10;                
    }
    printf("%lld\n\n",bin);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:09:02