2015-11-07 80 views
-4

我已經查看了本網站上提出的其他這些問題的示例,但它們都比我知道如何處理和使用的要複雜得多。基本上,我如何總結大數,或者甚至在沒有使用BigInteger類的情況下存儲大數來計算總和呢?這些數字非常大,它們甚至不會適合很長時間。Java:在不使用BigInteger的情況下添加大數字

我現在的想法是使用字符數組,但我不知道如何添加超大數字,即使我能夠將數字存儲在字符數組中。任何幫助都會很棒。謝謝。

+0

你應該使用BigInterger,它們是爲了大數字,在內部它們使用最有效的方式處理大數字。如果你想知道實現的細節,那麼你可以找到許多開源的代碼... –

+0

自從你學習小學數學以來,把數字加在一起並沒有改變。 –

+0

是的,重點不是使用BigInteger類。 – Subtopic

回答

2

假設您將一個巨大的數字存儲在一個long數組中。然後,你需要做的就是添加每一對,檢測是否有溢出,然後將一對添加到下一對。這完全像我們實際上手動添加的方式。假設我們要計算:

5879 
+6843 

我們做的是我們增加9和3一起,它溢出,成爲2.然後,我們增加7和4,並添加一個從溢流重新獲得2.我們溢出。接下來,我們添加8和8 + 1溢出獲得7,再次溢出。最後,我們添加5和6 + 1溢出獲得2溢出。因此,我們得到12722.現在想象這些數字中的每一個在你的數組中都很長。

檢測溢出:如果您有兩個正數,當它們加在一起時,只有當它們溢出時纔會產生一個負數。所以你只需要檢查結果是否小於0來檢測你是否需要添加一個到下一對。

+1

這可能是作業的重點,教導學生如何處理這樣的事情,而不是使用圖書館爲他們完成工作。我記得我CS時代的任務,我們必須以類似的方式計算階乘。練習的重點是讓我們弄清楚如何做數學,就像我們在紙上做的那樣。 – Thevenin

+0

當我有任何因子寫作問題時,我給他們[比奈的公式](http://www.artofproblemsolving.com/wiki/index.php/Binet's_Formula);)太糟糕了,他們沒有問這樣的問題在考試中... –

+0

感謝Flying_Banana,真的很有幫助:) – Subtopic

2

你想要的答案:

如果你不與Big-類之前,我建議你使用String一些解析,最好的科學,符號,以避免長期String「聖經」,並保持您的代碼結構儘可能地在邏輯而不是string上工作(因爲String比較緩慢而沉重)。

編輯注:例如,我的意思是保持您的結構在邏輯上工作,而不是字符串,請參閱Flying_Banana的答案。


答案:

學習使用Big-。只要有可能,不要代碼容易; code right

+0

我希望我能學會使用Big類,除非我不允許。這就是爲什麼我需要問這個問題。 – Subtopic

相關問題