0

我正在解决一个 leetcode 问题,它的输出需要是一个没有大量数字的二进制数。

我有十进制数,我试图使用 bitset 进行转换。

我写了一个函数来返回给定数字 n 的位数:

int digitNum (int n){
    int digit = 0;
    while(n!=0){
        n/=2;
        digit++;
    }
    return digit;
}

但是当我调用它时,

int digit = digitNum(res);
result = bitset<digit>(res).to_string();

数字必须是常数。我阅读了 boost::bitset,但看不到如何使用动态位集来解决我的问题。 http://www.boost.org/doc/libs/1_63_0/libs/dynamic_bitset/dynamic_bitset.html

因为它是手动定义每一位的。它不再转换为二进制。

4

1 回答 1

0

bitset 是一个模板。<> 中的任何选项都是在编译时生成的,因此它们不能在运行时从变量中获取输入来选择模板参数。您可以使用与现有循环非常相似的循环来完成与 bitset 相同的工作:

string numToBits(int number)
{
    if (number == 0)
        return "0";

    string temp;

    int n = (number > 0) ? number : - number;

    while (n > 0)
    {
        temp = string((n & 1) ? "1" : "0") + temp;
        n = n / 2;
    }

    if(number < 0) 
        temp = "-" + temp;

    return temp;
}
于 2017-03-13T09:01:38.403 回答