读书人

高分求解一个java有关问题

发布时间: 2012-01-12 22:11:58 作者: rapoo

高分求解一个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 的精度范围仅受计算机内存的限制。

读书人网 >J2SE开发

热点推荐