我试图打印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. 仍然没有工作......
答案 0 :(得分:7)
您正在使用Math.pow
来生成应使用BigInteger
函数执行此操作的值。
总和应存储在BigInteger中,而不是int。
答案 1 :(得分:7)
您正在进行整数运算,然后将其放入一个大整数。请改用biginteger pow方法。
答案 2 :(得分:4)
因为您没有使用BigInteger
。
使用BigInteger
计算数字并不能让您神奇地将其总和存储在int
中。
同样,将int
传递给BigInteger.valueOf()
并不会让int
更大。
答案 3 :(得分:3)
您使用常规整数调用Math.pow()
,而不是BigIntegers。你在整数文字上调用它。
你想要这个:
int i = 7; //or whatever power
BigInteger k = BigInteger.valueOf(2);
k = k.pow(i);