在Java中使用大量数字

如果我有一个数字x = 0123456789101112,我应该使用什么数字类型?我想也许长或双可能有用,因为它们的范围非常大,但是当我编译程序时,它说它的值太大了 . 我做了一些阅读,发现我可以使用BigInteger类 . 当我将所有值设为BigInteger时,它仍然无法编译:

BigInteger x = new BigInteger("0123456789101112");
BigInteger n = new BigInteger("0");
BigInteger m = new BigInteger("0");
BigInteger count = new BigInteger("0");
for(int i = str2.length() - 1; i >= 0; i--) {
    n.add(x.divide(Math.pow(10, i)));
}
for(int i = str2.length() - 2; i >= 0; i -= 2) {
    m.add(x.divide(Math.pow(10, i)));
    if(x.divide(Math.pow(10, i)) > 4) {
        count.add("1");
    }
}

我得到的错误都是一样的,发生在我使用Math.pow()方法的行中 . 该错误表示double无法转换为BigInteger . 我该如何解决这个问题?

回答(3)

2 years ago

Math.pow 返回一个不能强制转换为BigInteger的double,但BigInteger.divide返回BigInteger .

所以使用 BigInteger.valueOf((long)Math.pow(10, i))

2 years ago

使用原始 long 或其包装 Long

2 years ago

您需要使用BigIntegers的方法:https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

Math.pow()用于double .

此外,嵌套事物使调试变得困难 . 您可以考虑将它们分解为计算的中间步骤 .