2012-03-22 240 views
0

我有一個任務(我認爲一個很常見的),其目標是開發一個LargeInteger類,它可以用..非常大的整數進行計算。將字符串轉換爲大整數?

我顯然不允許使用Java.math.bigeinteger類。

右上角我卡住了。我需要從用戶(長數字)採取2個字符串,然後我將使用這些字符串來執行各種計算方法(添加,除法,乘法等)。

任何人都可以向我解釋背後的理論這應該工作?在我從用戶處取得字符串後(因爲它太大而無法存儲在int中),我應該把它分解成10位數的長數字塊(我認爲10是最長也許是9?)

任何幫助表示讚賞。

+1

整數數組(int []')在這裏似乎是合理的數據結構。 – 2012-03-22 02:09:52

回答

3

首先,想想存儲數字的方便數據結構是什麼。考慮如何將N號碼存儲到int[]陣列中。

現在我們來舉個例子。你將如何去添加兩個N數字號碼?

使用我們的小學增加,首先我們看最低有效數字(以標準表示法,這將是最右邊的數字)的兩個數字。然後添加它們。

所以如果最右邊的數字是78,我們將獲得15。取這個結果的最右邊數字(5),這是答案的最低有效位。 1結轉到下一個計算。所以現在我們看第二個最不重要的數字,並將它們與進位一起加上(如果沒有進位,則爲0)。並重復,直到沒有剩下數字要添加。

其基本思想是將數字存儲在某個數據結構中時,如何將手工添加,乘法等轉換爲代碼。

+0

好吧,我喜歡這個答案..這絕對讓我更好地思考如何做到這一點。所以基本上......只是想到這裏...它可能涉及2個int []數組,其中每個數字佔據數組中的一個位置。然後我會一起循環訪問數組,並從最右邊的數字開始添加每個數字。如果結果是> 9,我會存儲超過9的數量,並將其用於下一個添加的後續2個整數。這是否全部正確? 「N」數字代表什麼意思? – Sackling 2012-03-22 02:37:28

+0

@Sackling:確實! :)哦,我剛剛提到過,因爲數字的大小是任意的,並且無論數字中有多少個數字,您選擇的算法都應該可以工作。例如1000是一個3位數字。 – tskuzzy 2012-03-22 05:37:32

1

我會給你幾個關於我可能用類似任務做什麼的指示,但讓你弄清楚細節。

  1. 看看如何增加從簡單的電子加法器電路。具體來說,他們使用小塊加法組合在一起。這些校長將會提供幫助。具體而言,您可以添加塊,只需記住從一個塊到下一個塊。
  2. 你把它分解成更小的博客是一個很好的想法。只需記住正確的轉換。我懷疑9位數字就是正確的,以便攜帶,等等。

這些任務將幫助您加法和減法。乘法和除法有點棘手,但同樣,一些技巧。

  1. 乘法是更容易的任務,只要記住將一個數字的每個塊乘以另一個數字,並攜帶零。
  2. 整數除法基本上可以像長分區一樣使用,一次只能使用整個區塊。

我從來沒有真正建立過這樣的課程,所以希望在這裏有一些東西可以使用。

0

查看Michael Bromberger(一個C庫)的MPI 1.8.6的源代碼。它使用簡單的數據結構來生成簡單的算法。這是C,而不是Java,但很簡單。

其分部表現不佳(並導致非常大的bignum轉換爲tex的速度緩慢),但您可以按照代碼進行操作。

有一個函數mpi_read_radix用可選的前導+/-符號讀取任意基數(最多36位,其中字母Z爲35)的數字,並生成一個bignum。

我最近選擇了編程語言解釋器的代碼,因爲雖然它不是最快的執行者,也不是最完整的,但它非常容易被破解。我已經能夠將自己的平方根重寫爲更快的版本,將影響端口的一些編碼錯誤修復爲64位數字,並添加一些我需要的缺失操作。此外,許可與BSD兼容。