将超过 64 位的数组转换为基数为 10 的字符串
Convert an array of more than 64 bits to a base-10 string
我正在尝试滚动我自己的任意大小的无符号整数类,但我找不到一种方法来转换我用来存储位的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);
但是,这仅适用于 2^64 以下的数字,因为std::to_string
和内置unsigned long long
的限制。我将如何转换,许多无符号的 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";
}
优化留给读者作为练习。
编辑:请不要使用此代码!糟透了!我最终使用二进制除以 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;
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组