2010-09-02 58 views
10

我想知道BigInt和其他類似的東西是如何實現的。我試圖查看JAVA源代碼,但它對我來說都是希臘語和拉丁語。 你能否用言語解釋我的算法 - 沒有代碼,以便我明白當我使用JAVA API中的某些東西時我實際使用的是什麼。 關於BigNums實現如何工作?

回答

11

從概念上講,就像你手動任意大小算術一樣。你有類似於數組值的東西,以及用於數組上的各種操作的算法。如果你想添加100901。你開始用兩個數字作爲數組:

[0, 1, 0, 0] 
[0, 9, 0, 1] 

當您添加,您除了算法從右邊開始,需要0+1,給人10+0,給人0,並且 - 現在棘手的問題 - 9+110,但現在我們需要進行,所以我們在下一列加1,並將(9+1)%10放入第三列。

當你的數字變得足夠大 - 在這個例子中大於9999 - 那麼你必須以某種方式分配更多的空間。

當然,如果您將號碼存儲在反向的順序中,這當然會稍微簡化。

真正的實現使用完整的單詞,所以模數實際上是兩個大的冪,但概念是相同的。

Knuth上有很好的一節。

+1

非常感謝:) – shahensha 2010-09-03 10:39:18

+1

在Numerical Recipes中還有一個部分(它緊隨Knuth)。棘手的部分是獲得乘法權。學校算法不能很好地擴展,所以你使用技巧(例如FFT)。一旦你有乘法,你可以用它來表達很多事情。 – 2011-11-02 08:32:14