如果我有一个数字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 回答
Math.pow
返回一个不能强制转换为BigInteger的double,但BigInteger.divide返回BigInteger .所以使用
BigInteger.valueOf((long)Math.pow(10, i))
使用原始 long 或其包装 Long
您需要使用BigIntegers的方法:https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html
Math.pow()用于double .
此外,嵌套事物使调试变得困难 . 您可以考虑将它们分解为计算的中间步骤 .