十进制到二进制的转换c++

Decimal to binary conversion C++

本文关键字:转换 c++ 二进制 十进制      更新时间:2023-10-16

这个程序可以很好地处理3位数的整数。但是当输入4位整数时,它会给出错误的答案。

convertToBinary(123); // returns 1111011 (correct) 
convertToBinary(2345); // returns 1313853193 (incorrect)

下面是将十进制转换为二进制的函数:

int convertToBinary(int x){
int remainder;
int i=1;
int total=0;
while(x!=0){
    remainder = x%2;
    x /= 2;
    total += remainder*i;
    i *= 10;
}
return total;
}

这是因为您遇到了溢出:234510是1001001010012,这超过了用于存储total的32位int的限制。

您可以通过对total使用unsigned long long来略微提高范围,但是一些较大的数字仍然会触发溢出错误。更好的方法是对转换结果使用std::string

我遇到了同样的问题,使用string帮助了它。代码如下:

string Solution::findDigitsInBinary(int A) {
    std::string r;
    if(A == 0) return "0";
    else if(A == 1) return "1";
    else
    {
    while(A!=0) {r=(A%2==0 ?"0":"1")+r; A/=2;}
    }
    return r;
}