web-dev-qa-db-fra.com

Comment convertir une chaîne en BigInteger?

J'essaie de lire de très gros chiffres à partir de l'entrée standard et de les additionner.

Cependant, pour ajouter à BigInteger, je dois utiliser 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)));
}

Cela fonctionne bien, mais comme BigInteger.valueOf() ne prend que long, je ne peux pas ajouter de nombres supérieurs à la valeur maximale de long (9223372036854775807).

Chaque fois que j'essaie d'ajouter 9223372036854775808 ou plus, j'obtiens une exception NumberFormatException (qui est tout à fait attendue).

Y a-t-il quelque chose comme BigInteger.parseBigInteger(String)?

55
Twinone

Utiliser le constructeur 

BigInteger (String val)

Traduit la représentation décimale sous forme de chaîne d'un BigInteger en un BigInteger.

Javadoc

104
Uku Loskit

Selon la documentation :

BigInteger (String val)

Traduit la représentation décimale sous forme de chaîne d'un BigInteger en un BigInteger.

Cela signifie que vous pouvez utiliser String pour initialiser un objet BigInteger, comme indiqué dans l'extrait de code suivant:

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

BigInteger a un constructeur où vous pouvez passer une chaîne en argument.

essayez ci-dessous,

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

Au lieu d'utiliser valueOf(long) et parse(), vous pouvez directement utiliser le constructeur BigInteger qui prend un argument de chaîne:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

Cela devrait vous donner la valeur souhaitée.

7
User9123

Pour une boucle où vous souhaitez convertir une array de strings en une array de bigIntegers, procédez comme suit:

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