2010-12-22 42 views
11

我想在C++中實現一個BigInteger類。但是,首先,我有一個基本問題,「基礎數據」如何表示?例如,最愚蠢的方法是擁有一個固定的(或動態的)char數組,並在char中存儲每個整數的整數。但是,好吧,這是一個非常愚蠢的方式,我在這裏爲您提供建議。C++大整數

+2

可能重複的[如何在C++中實現big int](http://stackoverflow.com/questions/269268/how-to-implement-big-int-in-c) – darioo 2010-12-22 07:45:58

回答

10

還有一堆的建議,這裏現有的實現:C++ handling very large integers

如果你有實現自己的(如作業),那麼你就必須決定的最佳方式,以及如何「大」就需要處理。您可以使用一組DWORD,並處理從一個到另一個的溢出。

雖然,對於一些項目歐拉的東西,我實際上實現了一個BigNumber類建立在一個字符串。結果是+ - * /最簡單的實現,並且縮放到比我能用幾個unsigned long long s得到的顯着更長的數字。這個性能對於解決這些難題來說是完全足夠的。

因此,您需要在易用性和最佳性能之間進行權衡。玩得開心;-)

4

您可以完全按照您描述的方式創建一個大整數。事實上,我第一次實施這樣的課程,就是我這樣做的。它幫助我實現了算術運算(+,-等),因爲它在我習慣的基礎(10)中。

你的「字符數組」的自然增強是保持在10位,但是使用4位而不是整個字節。因此,數字123,456可以由字節12 34 56代替字符串123456來表示。 (三個字節,而不是六個)。

從那裏,你可以使基數爲2的數字存儲。諸如加法的基本算術運算在基數2中與在基數10中完全相同。因此,可以使用字節FF FF存儲數字65565。 (例如,在一個向量unsigned char s中。)爲了效率,BigInts的某些實現使用較大的塊,例如shortlong

如果您正在進行大量的顯示和/或序列化到base-10,並且想要避免轉換爲base-2,則Base-10大整數可能會很有用。