此程序适用于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;
}
答案 0 :(得分:3)
这是因为您遇到溢出:2345 10 是100100101001 2 ,超出了您用来存储的32位int
的限制total
。
您可以使用unsigned long long
total
来改善范围,但是一些较大的数字仍会触发溢出错误。更好的方法是使用std::string
作为转换结果。
答案 1 :(得分:0)
我遇到了同样的问题,使用字符串可以解决问题。 以下是代码:
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;
}