使用动态bitset转换十进制数

时间:2017-03-13 08:35:40

标签: c++ bitset boost-dynamic-bitset

我正在解决一个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,我不知道如何使用动态bitset来解决我的问题。 http://www.boost.org/doc/libs/1_63_0/libs/dynamic_bitset/dynamic_bitset.html

因为它是手动定义每个位。它不再转换为二进制文件。

1 个答案:

答案 0 :(得分:0)

bitset是一个模板。 &lt;&gt;中的任何选项在编译时生成,因此他们无法在运行时从变量中获取输入以选择模板参数。你可以像现有的循环一样使用循环来完成与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;
}