2013-03-30 182 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 
}