如何将任意大整数从任意基数转换为不同的基数?

时间:2013-11-10 20:58:25

标签: c++ windows numbers gmp

我有一个基数为n(无符号)的整数,长度为数十万个字符。

如何将此数字(从文件中读取的字符串)转换为2-256之间的任何基数?在合理的时间当然。

GMP库仅支持2-62碱基。

1 个答案:

答案 0 :(得分:4)

GMP使用a clever divide-and-conquer radix change algorithm来表示非常大的整数。

做一些使用相同基本想法的事情并不难。请拨打您的基数r和输入数字x

让每个rp[i] = r^(2^i) i直至rp[i]的原始数字位数的一半左右;拨打最后一个rp[n-1]。以模rp[n-1]为单位减少数量。然后,高2^(n-1)基数 - r数字是x / rp[n-1]转换为基数 - r的数字,低基数 - r数字是{{ 1}}转换为基础 - x % rp[n-1]。请注意,您只需计算一次r

这比一次提取单个数字更有效率,因为我们将rp - 位数减少到大约两个k - 位数而不是k/2位号码和log(r) - 位号。