题目:
* 你一定听说过这个故事。国王对发明国际象棋的大臣很佩服, 问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,
* 在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子, 在第4个棋盘格放8粒麦子,......后一格的数字是前一格的两倍,
* 直到放完所有棋盘格(国际象棋共有64格)。 国王以为他只是想要一袋麦子而已,哈哈大笑。
* 当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用! 请你借助计算机准确地计算,到底需要多少粒麦子。
在校内赛的时候,忘了BigInteger这个高精度的类存在。因此使用long导致溢出。唉~~~~
这里写代码片import java.math.BigInteger;
public class _1023拾麦子 {
public static void main(String[] args) {
BigInteger bi=new BigInteger("1");//第一格的1粒麦子
BigInteger sum=new BigInteger("0");//用来保存全部麦子的BigInteger
for(int x=2;x<=64;x++){
bi=bi.multiply(new BigInteger("2"));//每次*2 后一格的数字是前一格的两倍
sum=sum.add(bi);//累加
}
System.out.println(sum.add(new BigInteger("1")));//这里要+1,因为我们没把第一格子的加进去
}
}
答案:18446744073709551615