2013-03-30 21 views
39

Próbuję odczytać naprawdę duże liczby ze standardowego wejścia i dodać je razem.Jak przekonwertować ciąg na BigInteger?

Jednak, aby dodać do BigInteger, muszę korzystać 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))); 
} 

To działa dobrze, ale jak BigInteger.valueOf() zajmuje long tylko, nie mogę dodać numery większe niż long „s wartości max (9223372036854775807).

Ilekroć próbuję dodać 9223372036854775808 lub więcej, otrzymuję NumberFormatException (który jest całkowicie oczekiwany).

Czy jest coś takiego jak BigInteger.parseBigInteger(String)?

Odpowiedz

87

pomocą konstruktora

BigInteger (ciąg Val)

translacji dziesiętną reprezentację ciąg znaków BigInteger do BigInteger.

Javadoc

16

Według documentation:

BigInteger (ciąg Val)

translacji dziesiętną reprezentację ciąg znaków BigInteger do BigInteger.

Oznacza to, że można użyć String zainicjować BigInteger obiektu, jak pokazano w poniższym przykładzie:

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

BigInteger posiada konstruktora, gdzie można przekazać ciąg jako argument.

spróbować poniżej

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

Zamiast valueOf(long) i parse() można bezpośrednio użyć konstruktora BigInteger która przyjmuje argumentu wyrażenie:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829"); 

To powinno dać żądaną wartość.

0

W przypadku pętli gdzie chcesz przekonwertować array z strings do array z bigIntegers to zrobić:

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 
} 
Powiązane problemy