将十进制更改为二进制并使用非常大的数字计算其中的十进制数

时间:2015-10-04 15:44:55

标签: c++ binary

需要将小数从A变为B并将每个数字中的数字转换为二进制数除了执行大数字所需的时间之外,所有这些都是永久性的:D 这是我的代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string IntToBinary(long long number){
    string empty = "";
    while (number >= 1)
        if (number % 2 == 0){
            empty += '0';
            number /= 2;
        }
        else{
            empty += '1';
            number--;
            number /= 2;
        }
        reverse(empty.begin(), empty.end());
        return empty;
}

int main(){
long long A, B, count = 0;
while (cin >> A >> B){
    string temp;
    for (int i = A; i <= B; i++){
        temp = IntToBinary(i);
        for (int j = 0; j < temp.length(); j++){
            if (temp[j] == '1')
                count++;
        }
    }
    cout << count << endl;
    count = 0;
}
cin.get();
getchar();
return 0;
}

当我尝试输入大两个数字时 1000000000000000 10000000000000000 要么 9007199254740992 9007199254740992 它需要永远= D

1 个答案:

答案 0 :(得分:0)

while (number >= 1)
    if (number % 2 == 0){
        empty += '0';
        number /= 2;
    }
    else{
        empty += '1';
        number--;
        number /= 2;
    }

如果没有if/else,您可以更简单地写出来,如下所示:

while (number >= 1)
{
    empty += (number % 2)+'0';
    number /= 2;
}

你应该在这个循环中计算1,而不是在第二个循环中。