99 votes

Comment convertir un String en BigInteger ?

J'essaie de lire de très grands nombres depuis l'entrée standard et de les additionner.

Toutefois, 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 le BigInteger.valueOf() ne prend qu'un long Je ne peux pas additionner des nombres plus grands que long (9223372036854775807).

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

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

164voto

Uku Loskit Points 15705

Utilisation du constructeur

BigInteger(Chaîne val)

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

Javadoc

30voto

VitoShadow Points 2096

Selon le documentation :

BigInteger(Chaîne val)

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

Cela signifie que vous pouvez utiliser un String pour initialiser un BigInteger comme le montre l'extrait suivant :

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

10voto

Darshit Chokshi Points 496

BigInteger a un constructeur où vous pouvez passer une chaîne de caractères comme argument.

essayez ci-dessous,

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

9voto

User9123 Points 81

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

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

Cela devrait vous donner la valeur souhaitée.

2voto

Omar Mohammed Points 21

Pour une boucle où vous voulez convertir un array de strings à un array de bigIntegers faites-le :

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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X