是否有一种算法可以将两个任意长的整数精确地相乘?我正在使用的语言限于64位无符号整数长度(最大整数大小为18446744073709551615)。实际上,我希望能够通过分解每个数字,使用无符号的64位整数对其进行处理,然后将它们放回字符串中来解决此问题(这将解决乘法结果的问题)贮存)。

有任何想法吗?

最佳答案

大多数语言都有执行此操作的函数或库,通常称为Bignum库(GMP是一个很好的库。)

如果您想自己做,我会像人们在纸上做长乘法一样做。为此,您可以使用包含数字的字符串,也可以使用按位运算以二进制形式进行处理。

例子:

  45
 x67
 ---
 315
+270
----
 585

或以二进制形式:
   101
  x101
  ----
   101
  000
+101
------
 11001

编辑:以二进制形式执行之后,我意识到使用按位运算而不是包含以10为底的数字的字符串进行编码将更加简单(当然,而且速度更快)。我已经编辑了我的二进制乘法示例以显示一种模式:对于底部数字中的每个1位,将顶部数字相加,然后将1位时间的位置向左移一位到变量中。最后,该变量将包含乘积。

要存储产品,您必须有两个64位数字,并想象其中一个是产品的前64位,另一个是产品的后64位。您必须编写代码,将第二个数字的第63位添加到第一个数字的第0位。

关于algorithm - 非常长整数的乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/193398/

10-11 23:00
查看更多