日期:2014-05-20  浏览次数:20841 次

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