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

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

GMP库仅支持2-62。

最佳答案

GMP对大整数使用a clever divide-and-conquer radix change algorithm

要做一些使用相同基本思想的事情并不难。 call 您的基数r和输入号码x

让每个rp[i] = r^(2^i)i向上,直到rp[i]的位数约为原始数字的一半;叫最后一个rp[n-1]。减少模rp[n-1]的数量。然后,高2^(n-1) radix- r数字是x / rp[n-1]转换为base- r的数字,而低radix- r数字是x % rp[n-1]转换为base- r的数字。注意,您只需要计算一次rp

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

关于c++ - 如何将任意大整数从任意基数转换为不同的基数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19895113/

10-11 16:51