其他分享
首页 > 其他分享> > 棋盘放麦子

棋盘放麦子

作者:互联网

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 1 个棋盘格放 1粒麦子,在第 2 个棋盘格放 2 粒麦子,在第 3 个棋盘格放 4 粒麦子,在第 4 个棋盘格放 8 粒麦子,......后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 64 格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。

运行限制
最大运行时间:1s
最大运行内存: 128M

思路分析:这是一个等比数列求和问题,只需要用求和公式就行了。
求和公式:
在这里插入图片描述
将a1=1, an=2^64,q=2,代入后化简得:Sn = 2 ^ 64 - 1 。

代码:

#include <iostream>
#include<math.h>
using namespace std;
int main()
{
  unsigned long long sum = pow(2,64)-1;
  cout<<sum;
  return 0;
}

如果不用pow()函数,直接暴力求和也可以,但是sum的类型一定要为unsigned long long,否则会溢出,这个题的答案刚好是unsigned long long的最大正整数范围-1(18446744073709551615)

标签:麦子,格放,unsigned,long,64,棋盘
来源: https://blog.csdn.net/zjojk/article/details/115310812