我有一个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/