高分求解一个java问题!
class A {
static long i,c,k;
public static void main(String[] args) {
for (i=1,c=0,k=1;i <=64;i++) {
c=c + k;
k=k + k;
System.out.println( "前 "+i+ "项和 "+c);
}
}
}
这个循环到第65次的时候,long类型就产生溢出了,谁能给我得出正确的结果,不要溢出的那种错误,就是不管多大的数相加,都输出正确的结果,而不是输出溢出的结果值-1
------解决方案--------------------BigInteger
------解决方案--------------------如楼上所说
基本类型是不行了
用那些专门处理大数字的类吧
------解决方案--------------------public static void main(String[] args) {
BigInteger c = new BigInteger( "0 ");
BigInteger k = new BigInteger( "1 ");
for (int i = 1; i <= 64; i++) {
c = c.add(k);
k = k.add(k);
System.out.println( "前 " + i + "项和 " + c.toString());
}
}
------解决方案--------------------呵呵,算 2 的 i 次方减 1,long 的数据范围是 -2^63 ~ +2^63-1 要比 2^64-1 小,所以就要溢出了。我上面用 BigInteger 就可以解决了,BigInteger 的精度范围仅受计算机内存的限制。