2010-01-07 103 views
2

我正在研究一個場景,其中我必須在Java中實現BODMAS,操作數可以有多達1000位數。所以我選擇以下列方式實現它 - 我將中綴表達式(實現BODMAS的表達式)轉換爲後綴 然後我通過解析它所具有的每個BigInteger來評估後綴表達式。 我在這個實現中取得了成功。針對BigInteger的Java解決方法

現在我瞭解,我不能用BigInteger和不得不湊合着用的基本數據類型如int,字符串等

我一直在想怎麼可以這樣做,並坦率地說,沒有取得任何重大進展。

如何使用基本數據類型來實現BigInteger的任何幫助或建議將會很有幫助。

+2

這將有助於如果你能解釋*爲什麼*對BigInteger有限制。你可以拿BigInteger的源代碼並使用它 - 或者對於你的情況來說許可證太嚴格了? – 2010-01-07 17:35:32

+1

@Jon:我想他正在使用Java ME而不是Java SE。 – BalusC 2010-01-07 17:38:04

+1

我假設了一些更接近「作業練習」的內容並據此做出了回答。 – 2010-01-07 17:39:01

回答

2

實現大整數的直接方法是將它們存儲爲十進制數字的數組,例如。

int[] bignum = new int[] {1, 2, 3, 4}; 

您需要實現手寫加法,減法,乘法,除法,和其他任何你需要:1234可以用表示。

您可能會發現存儲的數字「逆轉」可能更容易,所以存儲1234:

int[] bignum = new int[] {4, 3, 2, 1}; 

更高級的應用中會使用基地2^32或東西比基地大得多10

2

以下是來自Open JDK的免費實現BigInteger。它包含在GPL2中(這是一個問題嗎?)

即使你不能複製&粘貼它,你可以學習如何在int []數組中存儲和操作位。

另一種可能是來自CERN的colt庫。至少它可以處理巨型位域。

編輯

找出BODMAS的含義後,(認爲這是一個加密算法或別的東西,不得不在一個特殊的和有限的JDK ;-)完成)),我想,小馬建議是不恰當的;)

我不刪除這個答案,即使現在我認爲,p1NG有反對使用(或重新實現)的BigInteger沒有「合法」的限制......

相關問題