在第4个棋盘格放8粒麦子,......后一格的数字是前一格的两倍, 直到放完所有棋盘格(国际象棋共有64格)。 国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用! 请你借助计算机准确地计算,到底需要多少粒麦子。
本题的关键在于:麦子的总数是非常大的,因此要选择能存储非常大的数的数据类型。这里选用BigInteger.
BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的
BigInteger 任意大的实数,可以处理小数精度问题。
基本的函数:
valueOf:赋初值
add:+ a.add(b);
subtract:-
multiply:*
divide:/
remainder:this % val
divideAndRemainder:a[0]=this / val; a[1]=this % val
pow:a.pow(b)=a^b
import java.math.BigInteger;
public class Main{
public static void main(String[] args){
BigInteger total=new BigInteger("0");
BigInteger base=new BigInteger("2");
//逐项相加
for(int i=0;i<64;i++){
total=total.add(base.pow(i));
}
System.out.println(total);
//直接求和
System.out.println(base.pow(64).add(new BigInteger("-1")));
}
}