在Java中使用大量数字

时间:2017-11-04 01:01:15

标签: java int biginteger

如果我有一个数字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 个答案:

答案 0 :(得分:2)

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

因此请使用BigInteger.valueOf((long)Math.pow(10, i))

答案 1 :(得分:0)

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

Math.pow()用于双倍。

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

答案 2 :(得分:0)

使用原始或其包装