首页 > 解决方案 > 在 C++ 中将十进制转换为二进制年份

问题描述

我编写了一个将十进制数字(出生日期)转换为二进制的程序。转换日期和月份工作顺利,但是在转换年份时出现问题,例如 2001 转换为 2521075409 而不是 11111010001。您能告诉我问题出在哪里吗?

{
    int i;
    long long temp, bin;

    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);
}

标签: c++binarydecimalconverters

解决方案


使用int i;,i *= 10快速达到 32 位整数的最大限制0x7fff'ffff。所以i也需要是 64 位的,unsigned所以上限可能会更高一点0xffff'ffff'ffff'ffff。例子

unsigned long long i = 1;
unsigned long long bin = 0;
int year = 2001;
while (year > 0) 
{
    int temp = year % 2;
    year /= 2;
    bin += temp * i;
    i *= 10;
    printf("check i: %llu\n", i);
}
printf("%016llu\n\n", bin);

要打印更大的数字,请temp在每次迭代中使用字符缓冲区进行保存。


推荐阅读