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);
    }
}

这是方法二:

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");

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45795349/article/details/106762893
今日推荐