繁体   English   中英

为什么java.Math.BigInteger在一定限制后会出错?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM