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
a
biginger
?你的问题是什么?停止将你的大整数转换为长整数和整数…可能的提示:谢谢,我不知道你可以这样打印大整数的值。
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);
}