2013-10-15 70 views
0

我有2個非常大的二進制數(144位數)。我想將它們寫入不同的RandomAccessFiles,然後將這些文件讀取到內存中,並檢查哪些數字更大。 我做了什麼至今:具有非常大的二進制數的Java BigInteger

1. 我創建一個BigInteger:

BigInteger big = new BigInteger("01110101010010101010111100010101010101010101010110101010101010101010010101010101010101010101010101111010010101010",2); 

2. 我得到的longValue:

big.longValue(); 

3 ..我寫長到randomaccessfile,讀取文件,比較長文件等...

但是,如果二進制比長。 maxvalue'我所做的是錯的,對嗎?

那麼有沒有人有任何建議?

否則我可以處理大的二進制數嗎?

+2

爲什麼不把大整數寫入文件? BigIntegers默認是可序列化的。檢查ObjectInputStream。您也可以檢查簡單地寫入相當於文件的字符串。 – maress

+0

您可以使用[位流](http://www.cs.duke.edu/courses/cps100e/spring11/assign/huff/code/BitInputStream.html)。理論上不應使用long來表示位。 –

回答

1

嘗試比較如下

  BigInteger big1 = new BigInteger("01110101010010101010111100010101010101010101010110101010101010101010010101010101010101010101010101111010010101010",2); 
      BigInteger big2 = new BigInteger("01110101010010101010111100010101010101010101010110101010101010101010010101010101010101010101010101111010010101010",2); 
      int result =big1.compareTo(big2); 
      System.out.println(result); 
+0

因爲我正在使用RandomAccessFile我想能夠尋找。我不太瞭解序列化,我可以將BigInteger序列化爲String嗎?我想知道文件需要多少字節,以便在讀取文件時進行查找。這就是爲什麼我把它轉換爲長(8字節)。我想要一個文件:寫入int,寫入int,寫入大的二進制,寫入int,寫入int,寫入大的二進制....等,然後能夠讀取所有值並比較二進制數。 – George

0
  1. 消除初始零

  2. 轉換這些數字串

  3. 如果(String1.length!= string.length減)最大數量是更長的一個

否則

從開始一個一個數字並比較。

如果(字符串1位X = 0 &串2位X = 0)到下一個數字

如果(字符串1位X = 1 &串2位X = 0)字符串1是大

if(string1 digit x = 0 & string 2 digit x = 1)字符串2很大

0

很明顯,你的電話號碼太長了很久。

我推薦你使用BigInteger.getByteArray()將你的BigInteger作爲一個字節數組導出,然後你可以將它保存到一個文件中(這就是我們在密碼學中所做的)。

此外,字節數組可以使用其構造器轉換回BigInteger。

+0

所以Vincent和upong非常感謝。我應該做的是將二進制數轉換爲BigInteger,使用getByteArray()將其寫入文件,使用構造函數BigInteger(byteArray [])從文件中讀取它,然後使用big1.compareTo(big2)比較BigInteger。我總結了任何其他人有同樣的問題。再次感謝! – George

+0

不客氣。如果您覺得合適,請記住將此答案標記爲解決方案。 – Vincent

相關問題