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

C++ 如何将任意大整数从任意基转换为不同的基?,c++,windows,numbers,gmp,C++,Windows,Numbers,Gmp,我有一个数十万个字符长的基数n(无符号)整数 如何将此数字(从文件读取的字符串)转换为2-256之间的任何基数?当然是在合理的时间 GMP库只支持基数2-62。GMP使用非常大的整数 使用相同的基本思想做一些事情并不难。调用基数r和输入号码x 让rp[i]=r^(2^i)对于每个i,直到rp[i]的位数约为原始位数的一半;调用最后一个rp[n-1]。将您的数字减少为模rp[n-1]。然后高的2^(n-1)radix-r数字是转换为base-r的x/rp[n-1]数字,低的radix-r数字是转换

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

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

GMP库只支持基数2-62。

GMP使用非常大的整数

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

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

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

GMP用于非常大的整数

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

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

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