[英]Why java.Math.BigInteger bugs out after a certain limit?
我正在尝试打印2 ^ n中的数字总和,其中n = 1到1000。这就是我所做的。
public static void main(String[] args) {
int n = 1000;
for (int i = 1; i < n; i++) {
BigInteger power = BigInteger.valueOf((int)Math.pow(2, i));
int sum = 0;
while (power.intValue() > 0) {
sum += power.intValue() % 10;
power = power.divide(BigInteger.valueOf(10));
}
System.out.print(sum + " ");
}
}
它只能工作到大约2 ^ 30左右,然后为其余部分打印相同的结果46。
我在C语言中使用“ long long”尝试了类似的操作,并在类似的限制后打印了0。
根据答案,我改变了
BigInteger power = BigInteger.valueOf((int)Math.pow(2, i));
至
BigInteger power = BigInteger.valueOf(2).pow(i);
和46更改为0。就像C。仍然无法正常工作...
您正在使用Math.pow
生成值,而应该使用BigInteger
函数来生成值。
总和也应该存储在BigInteger中,而不是int中。
您正在执行整数算术,然后将其放入biginteger。 请改用biginteger的pow方法。
因为您没有使用BigInteger
。
使用BigInteger
计算数字不会让您神奇地将它们的和存储在int
。
同样,将int
传递给BigInteger.valueOf()
并不会神奇地使该int
更大。
您正在使用正整数而不是BigIntegers调用Math.pow()
。 您是在整数文字上调用它。
你要这个:
int i = 7; //or whatever power
BigInteger k = BigInteger.valueOf(2);
k = k.pow(i);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.