Ich versuche, einige wirklich große Zahlen aus der Standardeingabe zu lesen und sie zu addieren.
Um BigInteger hinzuzufügen, muss ich jedoch Folgendes verwenden 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)));
}
Das funktioniert gut, aber da das BigInteger.valueOf()
einzige a ist long
, kann ich keine Zahlen hinzufügen, die größer als long
der Maximalwert sind (9223372036854775807).
Immer wenn ich versuche, 9223372036854775808 oder mehr hinzuzufügen, erhalte ich eine NumberFormatException (was vollständig erwartet wird).
Gibt es so etwas BigInteger.parseBigInteger(String)
?
java
string
biginteger
Twinone
quelle
quelle
Laut Dokumentation :
Dies bedeutet, dass Sie a verwenden können
String
, um einBigInteger
Objekt zu initialisieren , wie im folgenden Snippet gezeigt:sum = sum.add(new BigInteger(newNumber));
quelle
BigInteger verfügt über einen Konstruktor, in dem Sie einen String als Argument übergeben können.
versuchen Sie es unten,
private void sum(String newNumber) { // BigInteger is immutable, reassign the variable: this.sum = this.sum.add(new BigInteger(newNumber)); }
quelle
Anstatt
valueOf(long)
und zu verwendenparse()
, können Sie direkt den BigInteger-Konstruktor verwenden, der ein Zeichenfolgenargument verwendet:BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");
Das sollte Ihnen den gewünschten Wert geben.
quelle
Für eine Schleife, in der Sie ein
array
vonstrings
in einarray
von konvertieren möchten, gehen Sie wie folgt vorbigIntegers
: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 }
quelle
Wenn Sie Klartext (nicht nur Zahlen) in eine BigInteger konvertieren möchten, wird eine Ausnahme angezeigt, wenn Sie nur Folgendes versuchen: new BigInteger ("keine Zahl")
In diesem Fall könnten Sie es so machen:
public BigInteger stringToBigInteger(String string){ byte[] asciiCharacters = string.getBytes(StandardCharsets.US_ASCII); StringBuilder asciiString = new StringBuilder(); for(byte asciiCharacter:asciiCharacters){ asciiString.append(Byte.toString(asciiCharacter)); } BigInteger bigInteger = new BigInteger(asciiString.toString()); return bigInteger; }
quelle