有个很古老的传说,那时候象棋刚刚发明出来,阿拉伯的一个国王一下就迷上了,觉得应该重奖发明这个游戏的人,结果发明者来了,他让人家提要求,人家说棋盘上第一个格放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");
}
}