【发布时间】:2010-09-03 00:39:35
【问题描述】:
我想知道 BigInt 和其他类似的东西是如何实现的。我试图查看 JAVA 源代码,但对我来说都是希腊语和拉丁语。 您能否用文字解释一下算法 - 没有代码,以便我了解当我使用 JAVA API 中的某些东西时我实际使用的是什么。 问候
【问题讨论】:
标签: biginteger
我想知道 BigInt 和其他类似的东西是如何实现的。我试图查看 JAVA 源代码,但对我来说都是希腊语和拉丁语。 您能否用文字解释一下算法 - 没有代码,以便我了解当我使用 JAVA API 中的某些东西时我实际使用的是什么。 问候
【问题讨论】:
标签: biginteger
从概念上讲,就像您手动进行任意大小的算术一样。你有一个值数组,以及对数组起作用的各种操作的算法。
假设您要将100 添加到901。您从两个数字作为数组开始:
[0, 1, 0, 0]
[0, 9, 0, 1]
当你加法时,你的加法算法从右边开始,取0+1,给出1,0+0,给出0,然后——现在是棘手的部分——9+1给出10 ,但是现在我们需要进位,所以我们在下一列加1 over,并把(9+1)%10放到第三列。
当你的数字增长到足够大时——在这个例子中大于 9999——那么你必须以某种方式分配更多的空间。
当然,如果您以 reverse 顺序存储数字,这会有些简化。
真正的实现使用完整的单词,所以模数实际上是 2 的幂次方,但概念是一样的。
在 Knuth 中有一个非常好的部分。
【讨论】: