1

我试图在 n = 1 到 1000 的情况下打印 2^n 中的数字总和。这就是我所做的。

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 一样。仍然无法正常工作......

4

4 回答 4

7

Math.pow用来生成应该使用BigInteger函数来代替的值。

总和应该存储在 BigInteger 中而不是 int 中。

于 2013-08-14T21:32:00.287 回答
7

您正在做整数运算,然后将其放入一个大整数中。请改用大整数的 pow 方法。

于 2013-08-14T21:32:11.393 回答
4

因为你没有使用BigInteger.

使用计算数字BigInteger不会让您神奇地将它们的总和存储在int.

同样,传递一个inttoBigInteger.valueOf()并不会神奇地让它int变大。

于 2013-08-14T21:31:53.270 回答
3

Math.pow()使用常规整数而不是 BigIntegers 调用。你在整数文字上调用它。

你要这个:

int i = 7; //or whatever power
BigInteger k = BigInteger.valueOf(2);
k = k.pow(i);
于 2013-08-14T21:31:44.093 回答