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)
?
Utiliser le constructeur
BigInteger (String val)
Traduit la représentation décimale sous forme de chaîne d'un BigInteger en un BigInteger.
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));
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));
}
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.
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
}