2013-03-30 180 views
39

我想從標準輸入中讀取一些非常大的數字並將它們添加在一起。如何將字符串轉換爲BigInteger?

然而,添加到BigInteger的,我需要使用BigInteger.valueOf(long);

private BigInteger sum = BigInteger.valueOf(0); 

private void sum(String newNumber) { 
    // BigInteger is immutable, reassign the variable: 
    sum = sum.add(BigInteger.valueOf(Long.parseLong(newNumber))); 
} 

這工作正常,但作爲BigInteger.valueOf()只需要long,我不能添加數字比long的最高值(9223372036854775807 )。

每當我嘗試添加9223372036854775808或更多,我得到一個NumberFormatException(這是完全預期的)。

有沒有類似BigInteger.parseBigInteger(String)

回答

87

使用構造

的BigInteger(字符串VAL)

將BigInteger的十進制字符串表示轉換爲BigInteger。

Javadoc

16

按照documentation

的BigInteger(字符串VAL)

將BigInteger的十進制字符串表示轉換爲BigInteger。

這意味着你可以使用一個String初始化BigInteger對象,如圖下面的代碼片斷:

sum = sum.add(new BigInteger(newNumber)); 
8

的BigInteger具有構造在這裏可以傳遞字符串作爲參數。

嘗試下面,

private void sum(String newNumber) { 
    // BigInteger is immutable, reassign the variable: 
    sum = sum.add(new BigInteger(newNumber)); 
} 
5

而不是使用valueOf(long)parse()的,可以直接使用的BigInteger構造函數的字符串參數:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829"); 

這應該給你想要的值。

0

爲一個循環,你要的stringsarray轉換的bigIntegersarray做到這一點:

String[] unsorted = new String[n]; //array of Strings 
BigInteger[] series = new BigInteger[n]; //array of BigIntegers 

for(int i=0; i<n; i++){ 
    series[i] = new BigInteger(unsorted[i]); //convert String to bigInteger 
}