Java解决国际象棋放⽶粒问题
有个很古⽼的传说,那时候象棋刚刚发明出来,阿拉伯的⼀个国王⼀下就迷上了,觉得应该重奖发明这个游戏的⼈,结果发明者来了,他让⼈家提要求,⼈家说棋盘上第⼀个格放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);
}
}
这是⽅法⼆:
java valueofpublic 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");
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论