2013-03-30 24 views
39

Sto provando a leggere alcuni numeri veramente grandi da input standard e li aggiungo insieme.Come posso convertire una stringa in un BigInteger?

Tuttavia, da aggiungere al BigInteger, ho bisogno di utilizzare 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))); 
} 

Questo funziona bene, ma come l'BigInteger.valueOf() richiede solo un long, non posso aggiungere numeri maggiori di long 's valore massimo (9223372036854775807).

Ogni volta che si tenta di aggiungere 9223372036854775808 o più, ottengo un NumberFormatException (che è completamente previsto).

C'è qualcosa come BigInteger.parseBigInteger(String)?

risposta

87

Usando il costruttore

BigInteger (String val)

traduce la rappresentazione stringa decimale di un BigInteger in un BigInteger.

Javadoc

16

Secondo il documentation:

BigInteger (String val)

traduce la rappresentazione stringa decimale di un BigInteger in un BigInteger.

Ciò significa che è possibile utilizzare un String per inizializzare un oggetto BigInteger, come mostrato nel seguente frammento:

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

BigInteger trovi costruttore dove si può passare stringa come argomento.

cercano di seguito,

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

Invece di usare valueOf(long) e parse(), è possibile utilizzare direttamente il costruttore BigInteger che prende un argomento di tipo stringa:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829"); 

Questo dovrebbe dare il valore desiderato.

0

Per un ciclo in cui si desidera convertire un array di strings a un array di bigIntegers fare questo:

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 
} 
Problemi correlati