2011-09-27 119 views
0

我試圖比較大數以至於BigIntegers無法處理它們的數字。我的解決方案是將數字轉換爲字符串,並使用字符串比較。將大數字轉換爲字符串格式進行比較

這項工作?我不確定如何實現這樣的事情。我只是試圖對一個算法進行單元測試,以產生一個項目Euler程序的階乘1000,這個項目我被吸收進去了。

+0

你有BigIntegers,這是沒有可比性的一些示例代碼?爲什麼它不適用於Strings?如果只有一個字符串以「 - 」開頭,則這個更小。如果兩者均爲正值,則較短的字符串較小,如果兩者均爲負值則較長。否則從左邊逐個比較它們。 –

+0

你的號碼有多大? 1000!似乎有大約2568位數字,這應該不是問題 – Henry

+0

最大的數字將是1000!,是的。是否會擴大BigInteger滿足要求? –

回答

1

你的假設是錯誤的。

BigInteger提供了任意精度,所以它絕對可以處理這麼大的數字。

嘗試以下操作:

public class Main { 
    public static void main(String[] args) { 
     BigInteger thousand = BigInteger.valueOf(1000L); 
     for (int i = 999; i > 0; i--) 
     { 
      thousand = thousand.multiply(BigInteger.valueOf(i)); 
     } 

     System.out.println(thousand.toString()); 
    } 

} 
+0

真的嗎?我讀過BigInteger的上限比這個小得多。你說這個限制是任意的,它是否擴展以滿足用戶需求?你認爲這將是測試我的代碼的最佳方式嗎? –

+0

BigInteger使用符號量級編碼(http://en.wikipedia.org/wiki/Signed_number_representations#Sign-and-magnitude_method)和int []來存儲大小。 Java中一個數組的最大長度是2147483647. 這很大(除非我的數學錯誤,大概是2 ^(32 * 2147483647))。 –

相關問題