Ответ 1
Используя конструктор
BigInteger (String val)
Переводит десятичное строковое представление BigInteger в 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)
?
Используя конструктор
BigInteger (String val)
Переводит десятичное строковое представление BigInteger в BigInteger.
В соответствии с документацией:
BigInteger (String val)
Переводит десятичное строковое представление BigInteger в BigInteger.
Это означает, что вы можете использовать String
для инициализации объекта BigInteger
, как показано в следующем фрагменте:
sum = sum.add(new BigInteger(newNumber));
BigInteger имеет конструктор, в котором вы можете передать строку в качестве аргумента.
попробуйте ниже,
private void sum(String newNumber) {
// BigInteger is immutable, reassign the variable:
this.sum = this.sum.add(new BigInteger(newNumber));
}
Вместо использования valueOf(long)
и parse()
вы можете напрямую использовать конструктор BigInteger, который принимает строковый аргумент:
BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");
Это даст вам желаемое значение.
Для цикла, в котором вы хотите преобразовать 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
}