我想知道BigInt和其他类似的东西是如何实现的。我试图查看JAVA源代码,但它对我来说都是希腊语和拉丁语。 你能用语言向我解释算法 - 没有代码,这样我就能理解当我使用JAVA API时我实际使用的内容。 问候
答案 0 :(得分:11)
从概念上讲,就像你手工制作任意尺寸的算术一样。你有类似数组的东西,以及适用于数组的各种操作的算法。
假设您要将100
添加到901
。首先将这两个数字作为数组开始:
[0, 1, 0, 0]
[0, 9, 0, 1]
添加时,您的添加算法从右侧开始,采用0+1
,提供1
,0+0
,提供0
,以及 - 现在是棘手的部分 - - 9+1
提供了10
,但现在我们需要执行,因此我们将下一列添加1,并将(9+1)%10
放入第三列。
如果你的数字变得足够大 - 在这个例子中大于9999 - 那么你必须以某种方式分配更多的空间。
如果您以反向顺序存储数字,这当然会有所简化。
真正的实现使用全字,因此模数实际上是2的大功率,但概念是相同的。
在Knuth中有一个非常好的部分。