Wie konvertiere ich einen String in eine BigInteger?


82

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 longder 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)?

Antworten:


140

Konstruktor verwenden

BigInteger (String val)

Übersetzt die dezimale Zeichenfolgendarstellung einer BigInteger in eine BigInteger.

Javadoc


Ich habe das gleiche versucht, aber ich hatte ein Problem, weil ich den Import von java.math.BigInteger
Arun

23

Laut Dokumentation :

BigInteger (String val)

Übersetzt die dezimale Zeichenfolgendarstellung einer BigInteger in eine BigInteger.

Dies bedeutet, dass Sie a verwenden können String, um ein BigIntegerObjekt zu initialisieren , wie im folgenden Snippet gezeigt:

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

10

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

8

Anstatt valueOf(long)und zu verwenden parse(), 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.


2

Für eine Schleife, in der Sie ein arrayvon stringsin ein arrayvon konvertieren möchten, gehen Sie wie folgt vor bigIntegers:

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

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.