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

0voto

Aaron Points 1

Si vous voulez convertir du texte en clair (pas seulement des chiffres) en un BigInteger, vous rencontrerez une exception, si vous essayez simplement de : new BigInteger("not a Number")

Dans ce cas, vous pourriez procéder de la manière suivante :

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

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