拾麦子 java蓝桥杯算法省题

题目:
 * 你一定听说过这个故事。国王对发明国际象棋的大臣很佩服, 问他要什么报酬,大臣说:请在第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值