有个很古老的传说,那时候象棋刚刚发明出来,阿拉伯的一个国王一下就迷上了,觉得应该重奖发明这个游戏的人,结果发明者来了,他让人家提要求,人家说棋盘上第一个格放1粒麦子,第二个格2粒,第三格4粒,第四格8粒,这样类推下去,最后一个格也放满,最后把这些麦粒奖给他,国王欣然同意,觉得这个人很厚道,不漫天要价,结果按照这个规律装麦粒的时候才发现,原来全国粮仓里的麦子也不够用。这就是典型的数量级上的错误
大家都知道,在Java中,最大的数据类型是long, 但是这个问题,数据庞大到long也解决不了,在java中还有一种方法可以解决那就是BigInteger,,可以用他来解决,,废话不多说,直接上代码
这是方法一:用了两层for循环
package com.dj.chouxiang;import java.math.BigInteger;public class number2 {public static void main(String[] args) {long a=System.currentTimeMillis(); // 获取开始时间BigInteger sum=BigInteger.ZERO;for(int i=1;i<=64;i++){BigInteger item=BigInteger.ONE;for(int j=1;j<i;j++){item=item.multiply(BigInteger.valueOf(2));}sum=sum.add(item);System.out.println(i+":"+item);}long b = System.currentTimeMillis(); // 获取结束时间System.out.println("所耗时间是:"+(b-a)+"ms");System.out.println(sum);}
}
这是方法二:
public class number2_1 {public static void main(String[] args) {long a=System.currentTimeMillis(); // 获取开始时间String coun = "1";String sum = "0";for (int i = 1; i <=64; i++) {System.out.println(i+":"+coun);BigInteger big = new BigInteger(coun);BigInteger max = new BigInteger(sum);sum = big.add(max).toString();coun = big.add(big).toString();}System.out.println("sum="+sum);long b = System.currentTimeMillis(); // 获取结束时间System.out.println("所耗时间是:"+(b-a)+"ms");}
}