【问题标题】:How to convert arbitrary large integer from arbitrary base to a different base?如何将任意大整数从任意基数转换为不同基数?
【发布时间】:2013-11-11 05:15:42
【问题描述】:

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

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

GMP 库仅支持碱基 2-62。

【问题讨论】:

    标签: c++ windows numbers gmp


    【解决方案1】:

    GMP 使用 a clever divide-and-conquer radix change algorithm 处理非常大的整数。

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

    让每个irp[i] = r^(2^i) 直到rp[i] 的位数大约是原始数字的一半;拨打最后一个rp[n-1]。以 rp[n-1] 为模减少您的数字。那么2^(n-1)基数-r的高位数字是x / rp[n-1]转换为基数-r的数字,基数低-r数字是x % rp[n-1]转换为基数-r的数字。请注意,您只需计算一次rp

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

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多