十进制到二进制转换C ++

时间:2014-08-06 10:40:06

标签: c++ binary int decimal

此程序适用于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;
}

2 个答案:

答案 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;
}