如何为BigInteger分配一个非常大的数字?

时间:2015-06-20 17:09:13

标签: java biginteger value-of

给出以下输入:

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);
    }

第一个值超出了Long数的边界,因此我得到以下异常:

  

线程“main”中的异常java.util.InputMismatchException:用于输入   串:   “4534534534564657652349234230947234723947234234823048230957349573209483057”

我认为BigInteger期望Long类型与valueOf()方法一起使用(如http://docs.mongodb.org/manual/reference/glossary/#term-page-fault所述)。如何将极大数字传递给BigInteger?

4 个答案:

答案 0 :(得分:7)

如果输入的数字不适合0use the constructor that takes a String argument

long

答案 1 :(得分:2)

以字符串形式读取数字。

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
}

答案 2 :(得分:1)

使用字符串构造函数。

喜欢这个。

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

如果long数据类型可以处理任意大数字,则不需要BigInteger。

答案 3 :(得分:1)