将超过 64 位的数组转换为 base-10 字符串
Convert an array of more than 64 bits to a base-10 string
我正在尝试滚动我自己的任意大小的无符号整数 class,但我无法找到一种方法来转换 std::vector<bool>
我用来将位存储到基数 10 的字符串.目前,我的算法是
unsigned long long sum = 0LL;
for(unsigned long long i=0; i<64LL && i<bit_list.size(); i++){
if(bit_list[i]){
sum |= 1LL << i;
}
}
return std::to_string(sum);
但是,由于 std::to_string
和内置 unsigned long long
的限制,这仅适用于 2^64 以下的数字。我将如何将许多位 unsigned int 转换为以 10 为底的转换的字符串表示形式?最好,我希望该算法可以扩展到任意数量的位。
伪代码:
string s;
your_bitlist_class i;
if ( i > 0 )
{
while ( i > 0 )
{
s.insert( 0, std::to_string( i % 10 ) );
i /= 10;
}
}
else
{
s = "0";
}
优化留作 reader 的练习。
编辑:请不要使用此代码!糟透了!我最终使用二进制除以 10 和余数。
这是我发现效果很好的算法。它不是超级高效,但它完成了工作。
BigInt num_copy(this);
std::vector<unsigned short> digits;
digits.push_back(0);
while(num_copy!=0){
num_copy--;
digits[0]++;
unsigned long long i = 0LL;
while(digits[i]==10){
if(digits.size()==(i+1LL)){
digits.push_back(0);
}
digits[i]=0;
i++;
digits[i]++;
}
}
std::string outstr = "";
for(unsigned long long i=0LL; i < digits.size(); i++){
outstr = std::to_string(digits[i]) + outstr;
}
return outstr;
我正在尝试滚动我自己的任意大小的无符号整数 class,但我无法找到一种方法来转换 std::vector<bool>
我用来将位存储到基数 10 的字符串.目前,我的算法是
unsigned long long sum = 0LL;
for(unsigned long long i=0; i<64LL && i<bit_list.size(); i++){
if(bit_list[i]){
sum |= 1LL << i;
}
}
return std::to_string(sum);
但是,由于 std::to_string
和内置 unsigned long long
的限制,这仅适用于 2^64 以下的数字。我将如何将许多位 unsigned int 转换为以 10 为底的转换的字符串表示形式?最好,我希望该算法可以扩展到任意数量的位。
伪代码:
string s;
your_bitlist_class i;
if ( i > 0 )
{
while ( i > 0 )
{
s.insert( 0, std::to_string( i % 10 ) );
i /= 10;
}
}
else
{
s = "0";
}
优化留作 reader 的练习。
编辑:请不要使用此代码!糟透了!我最终使用二进制除以 10 和余数。
这是我发现效果很好的算法。它不是超级高效,但它完成了工作。
BigInt num_copy(this);
std::vector<unsigned short> digits;
digits.push_back(0);
while(num_copy!=0){
num_copy--;
digits[0]++;
unsigned long long i = 0LL;
while(digits[i]==10){
if(digits.size()==(i+1LL)){
digits.push_back(0);
}
digits[i]=0;
i++;
digits[i]++;
}
}
std::string outstr = "";
for(unsigned long long i=0LL; i < digits.size(); i++){
outstr = std::to_string(digits[i]) + outstr;
}
return outstr;