如果我有一个数字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。我该如何解决这个问题?
答案 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)
使用原始长或其包装长