2013-03-30 9 views
39

Ich versuche, einige wirklich große Zahlen von der Standardeingabe zu lesen und sie zusammenzufügen.Wie konvertiere ich einen String in einen BigInteger?

jedoch zu BigInteger hinzuzufügen, muss ich BigInteger.valueOf(long); verwenden:

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))); 
} 

Das funktioniert gut, aber wie die BigInteger.valueOf() nur eine long dauert, kann ich nicht Zahlen addieren mehr als long ‚s Maximalwert (9223372036854775807).

Immer wenn ich versuche, 9223372036854775808 oder mehr hinzuzufügen, bekomme ich eine NumberFormatException (was vollständig erwartet wird).

Gibt es etwas wie BigInteger.parseBigInteger(String)?

Antwort

87

den Konstruktor

BigInteger (String val)

Verschiebt die Dezimalstring Darstellung eines BigInteger in einen BigInteger.

Javadoc

16

Nach der documentation:

BigInteger (String val)

Verschiebt die Dezimalstring Darstellung eines BigInteger in einen BigInteger.

Es bedeutet, dass Sie ein String zu initialisieren ein BigInteger Objekt verwenden können, wie im folgenden Ausschnitt gezeigt:

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

BigInteger Konstruktor hat, wo man String als Argument übergeben kann.

unten versuchen,

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

Statt valueOf(long) und parse() verwenden, können Sie direkt den BigInteger Konstruktor verwenden können, die ein String-Argument:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829"); 

, dass Sie den gewünschten Wert geben sollte.

0

Für eine Schleife, wo Sie eine array von strings zu einem array von bigIntegers dies tun konvertieren möchten:

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 
}