我有一个很大的十六进制数,例如CD4A0619FB0907BC00000 (25!)或者其他任何像这样的数字。现在,只使用标准C/C++代码(没有像Boost这样的库),我想将这个数字转换为十进制数15511210043330985984000000。不幸的是,对于64位整数(如long long)来说,它太大了,我也不想使用任何浮点数据类型。如果这是可能的话,你怎么能做到呢?
发布于 2015-07-24 15:13:56
假设您不想使用任何符合您的描述的资源,“库就像Boost”。简单的答案是编写您自己的子集,只需使用所需的操作。如果32位十六进制数字就足够了,那么最简单的方法就是为128位int创建自己的128位无符号int,并为该128位int编写一个除以10的函数(产生商和余数)。你真的不需要任何其他函数,除以10是相当容易的。将多达32位十六进制数字转换为128位int是很简单的,从一系列除以10的数字生成十进制输出也是微不足道的。如果您想要的基本上是无限的大小,那么它可能更简单地表示一个十进制数字字符串的数字,并写一个例程乘以16,并添加另一个数字。这将永远不是有效的解决方案,只是可能更容易为您的目的和无限大小的代码。
发布于 2016-08-17 17:07:42
vector<unsigned int> bin2dec(vector<unsigned int> binary)
{
vector<unsigned int> decimal;
bool all_zero = false;
// binary[i]: stores 8-bit of the nubmer.
// Ex. 258 = 0x102 => binary[0] = 0x2, binary[1] = 0x1.
while (!all_zero) {
all_zero = true;
for (int i = binary.size() - 1; i >= 0; i--) {
int q = binary[i] / 10;
int r = binary[i] % 10;
binary[i] = q;
if (i > 0) {
binary[i-1] += (r << 8);
} else {
decimal.insert(decimal.begin(), r);
}
if (q != 0) {
all_zero = false;
}
}
}
// each element stands for one digit of the decimal number.
// Ex. 258 => decimal[0] = 2, decimal[1] = 5, decimal[2] = 8.
return decimal;
}https://stackoverflow.com/questions/31613810
复制相似问题