Как преобразовать String в BigInteger?

Я пытаюсь прочитать некоторые действительно большие числа из стандартного ввода и добавлять их вместе.

Однако, чтобы добавить в BigInteger, мне нужно использовать 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)));
}

Это работает отлично, но поскольку BigInteger.valueOf() принимает только long, я не могу добавить числа больше, чем long max значение (9223372036854775807).

Всякий раз, когда я пытаюсь добавить 9223372036854775808 или более, я получаю исключение NumberFormatException (что вполне ожидаемо).

Есть ли что-то вроде BigInteger.parseBigInteger(String)?

Ответ 1

Используя конструктор

BigInteger (String val)

Переводит десятичное строковое представление BigInteger в BigInteger.

Javadoc

Ответ 2

В соответствии с документацией:

BigInteger (String val)

Переводит десятичное строковое представление BigInteger в BigInteger.

Это означает, что вы можете использовать String для инициализации объекта BigInteger, как показано в следующем фрагменте:

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

Ответ 3

BigInteger имеет конструктор, в котором вы можете передать строку в качестве аргумента.

попробуйте ниже,

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

Ответ 4

Вместо использования valueOf(long) и parse() вы можете напрямую использовать конструктор BigInteger, который принимает строковый аргумент:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

Это даст вам желаемое значение.

Ответ 5

Для цикла, в котором вы хотите преобразовать array из strings в array of bigIntegers, выполните следующее:

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
}