Как присвоить BigInteger очень большое число?

Учитывая следующий ввод:

4534534534564657652349234230947234723947234234823048230957349573209483057
12324000123123

Я попытался присвоить эти значения BigInteger следующим образом.

public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        BigInteger num1 = BigInteger.valueOf(sc.nextLong());
        sc.nextLine();
        BigInteger num2 = BigInteger.valueOf(sc.nextLong());

        BigInteger additionTotal = num1.add(num2);
        BigInteger multiplyTotal = num1.multiply(num2);

        System.out.println(additionTotal);
        System.out.println(multiplyTotal);
    }

Первое значение выходит за границы длинного числа, поэтому я получаю следующее исключение:

Исключение в потоке "main" java.util.InputMismatchException: для входной строки: "4534534534564657652349234230947234723947234234823048230957349573209483057"

Я предположил, что BigInteger ожидает тип Long для использования с методом valueOf() (как указано здесь). Как я могу передать очень большие числа в BigInteger?


person crmepham    schedule 20.06.2015    source источник


Ответы (4)


Если введенное число не помещается в long, используйте конструктор, который принимает аргумент String:

String numStr = "453453453456465765234923423094723472394723423482304823095734957320948305712324000123123";
BigInteger num = new BigInteger(numStr);
person Sergey Kalinichenko    schedule 20.06.2015

Прочитайте огромное число в виде строки.

public static void main(String[] args)
{
    Scanner in = new Scanner(System.in);
    String s = in.nextLine();
    BigInteger num1 = new BigInteger(s);

    s = in.nextLine();
    BigInteger num2 = new BigInteger(s);

    //do stuff with num1 and num2 here
}
person Adam Evans    schedule 20.06.2015

Используйте конструктор String: http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String)

      public BigInteger(String val)
person TMR    schedule 20.06.2015

Используйте конструктор строк.

Нравится.

http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String)

Если бы тип данных long мог обрабатывать произвольно большие числа, в BigInteger не было бы необходимости.

person emory    schedule 20.06.2015