web-dev-qa-db-ger.com

Wie konvertiere ich einen String in einen BigInteger?

Ich versuche, einige wirklich große Zahlen aus der Standardeingabe zu lesen und zusammenzurechnen.

Um jedoch 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 da die BigInteger.valueOf() nur eine long braucht, kann ich keine Zahlen hinzufügen, die größer sind als der maximale Wert der long (9223372036854775807).

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

Gibt es so etwas wie BigInteger.parseBigInteger(String)?

55
Twinone

Verwenden des Konstruktors 

BigInteger (String val)

Übersetzt die dezimale Zeichenfolgendarstellung eines BigInteger in einen BigInteger.

Javadoc

104
Uku Loskit

Nach der Dokumentation :

BigInteger (String val)

Übersetzt die dezimale Zeichenfolgendarstellung eines BigInteger in einen BigInteger.

Das bedeutet, dass Sie eine String verwenden können, um ein BigInteger-Objekt zu initialisieren, wie im folgenden Ausschnitt dargestellt:

sum = sum.add(new BigInteger(newNumber));
17
Vito Gentile

BigInteger hat einen Konstruktor, an den Sie Zeichenfolge als Argument übergeben können.

versuche es unten,

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

Anstelle von valueOf(long) und parse() können Sie direkt den BigInteger-Konstruktor verwenden, der ein String-Argument verwendet:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

Das sollte Ihnen den gewünschten Wert geben.

7
User9123

Für eine Schleife, in der Sie eine array von strings in eine array von bigIntegers konvertieren möchten, führen Sie Folgendes aus:

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
}
0
Omar Mohammed