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)
?
Verwenden des Konstruktors
BigInteger (String val)
Übersetzt die dezimale Zeichenfolgendarstellung eines BigInteger in einen BigInteger.
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));
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));
}
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.
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
}