Java biginger.pow()不';直到最后2次迭代才开始工作?
我有以下代码Java biginger.pow()不';直到最后2次迭代才开始工作?,java,biginteger,Java,Biginteger,我有以下代码 public static void main(String[] args) { BigInteger iter = BigInteger.valueOf(140); BigInteger y = BigInteger.valueOf(1114112); BigInteger sum = BigInteger.valueOf(0); while(iter.intValue() != 0) { BigInteger z = BigInt
public static void main(String[] args) {
BigInteger iter = BigInteger.valueOf(140);
BigInteger y = BigInteger.valueOf(1114112);
BigInteger sum = BigInteger.valueOf(0);
while(iter.intValue() != 0) {
BigInteger z = BigInteger.valueOf((y.pow(iter.intValue())).longValue());
sum = sum.add(z);
iter = iter.subtract(BigInteger.valueOf(1));
System.out.println("Itereration: " + (140 - iter.longValue()));
System.out.println("Y: " + y.longValue());
System.out.println("Z: " + z.longValue());
System.out.println("Sum: " + sum.longValue());
}
}
但是,输出是这样的(仅最后3次迭代)迭代1-136的其余部分与迭代137相同,
.longValue()
调用对如此大的biginger
值执行完全错误的操作。如果您尝试改用.longValueExact()
,您会看到它抛出异常,因为值超出了long
的范围。但是,如果您不执行不必要的.longValue()
调用,代码将正常工作:
BigInteger iter = BigInteger.valueOf(140);
BigInteger y = BigInteger.valueOf(1114112);
BigInteger sum = BigInteger.valueOf(0);
while(iter.intValue() != 0) {
BigInteger z = y.pow(iter.intValue();
sum = sum.add(z);
iter = iter.subtract(BigInteger.valueOf(1));
System.out.println("Itereration: " + (140 - iter.longValue()));
System.out.println("Y: " + y);
System.out.println("Z: " + z);
System.out.println("Sum: " + sum);
}
和@RC。在评论中建议,您可以使iter
成为一个简单的int
,从而进一步简化代码:
int iter = 140;
BigInteger y = BigInteger.valueOf(1114112);
BigInteger sum = BigInteger.valueOf(0);
while(iter != 0) {
BigInteger z = y.pow(iter);
sum = sum.add(z);
iter--;
System.out.println("Itereration: " + (140 - iter));
System.out.println("Y: " + y);
System.out.println("Z: " + z);
System.out.println("Sum: " + sum);
}
旁注:
iter
abiginger
?你的问题是什么?停止将你的大整数转换为长整数和整数…可能的提示:谢谢,我不知道你可以这样打印大整数的值。
int iter = 140;
BigInteger y = BigInteger.valueOf(1114112);
BigInteger sum = BigInteger.valueOf(0);
while(iter != 0) {
BigInteger z = y.pow(iter);
sum = sum.add(z);
iter--;
System.out.println("Itereration: " + (140 - iter));
System.out.println("Y: " + y);
System.out.println("Z: " + z);
System.out.println("Sum: " + sum);
}