我正在解决一个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
因为它是手动定义每个位。它不再转换为二进制文件。
答案 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;
}