有個很古老的傳說,那時候象棋剛剛發明出來,阿拉伯的一個國王一下就迷上了,覺得應該重獎發明這個遊戲的人,結果發明者來了,他讓人家提要求,人家說棋盤上第一個格放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");
}
}