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

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章