2013-11-28 49 views
-2

我想存儲和操作非常大的整數,什麼是最好的方式來做到這一點,而不使用預先構建的庫?在C++中存儲大整數

基於什麼其他StackOverflow的用戶聲稱:

的的std :: string對象將被複制到堆棧,但是字符串身體不願 - 它將會在堆中分配。實際的限制將取決於系統和程序內存的使用情況,可能是32位系統上的千萬到十億個字符。

我只想到兩個簡單的方法,這兩個方法都要求我寫我自己的類。第一種是使用矢量和字符串,第二種是將大整數分解爲整數數組中的單獨塊並將總和相加。

我的電腦上一個字符串的最大尺寸()是4294967291.

我決定寫我自己的類。 感謝您的幫助:C++ char vector addition

編輯: 它的工作:https://github.com/Jyang772/Large_Number_Collider

+2

而你的問題是? –

+1

這取決於您的優先級(簡化編碼?易於維護?性能?內存消耗?)以及您需要執行哪些操作。 –

+3

查看預先存在的庫並複製它。在你理解它之前,仔細研究它的代碼。 –

回答

1

如果取決於這個整數的用法,但爲了保持數字的語義,並讓您的類編碼更容易,我建議使用整數的向量long。 對於代碼設計和維護來說,使用std::string會複雜得多。

您將不得不重新定義每個操作員,並考慮計算從您的一個號碼到另一個號碼的傳播。

+0

謝謝。我喜歡你的答案,因爲你不認爲這是作業。我一直在看BigInt並決定寫我自己的課程。稍後我可能會使用完整的代碼編輯此問題。 –

+0

@Justin好;) –

0

通常的方法是使用整數(多頭等)的陣列(矢量等),而不是字符串。

從查看現有的大整數類開始,即使您不能爲作業使用一個逐字記錄。

+0

謝謝。這不是作業,爲什麼你會這樣認爲?是因爲我的年齡還是因爲你認爲我正在尋找爲我寫的源代碼? 我決定寫我自己的課。這將變得更加複雜但挑戰也被接受。我真的想學習一些我感興趣的東西。 –

+0

好的,我很抱歉 - 這只是不明原因的要求,不使用現成的組件通常是家庭作業的標誌(這不是一種侮辱,大多數人已經完成一些在他們的生活!)。如果你只是一個熱衷學習的勤奮人物,那麼確保你在你的問題中進行溝通。 –

0

當我們遇到類似的競賽問題時,我們使用了矢量,每個單元格包含數字的一個數字。這樣你可以存儲一個非常大的數字。