这道题怎么做?C++ 60
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,在第4个棋盘...
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,在第4个棋盘格放8粒麦子,…后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有64格)。国王以为他只是想要一袋麦子而已,哈哈大笑。当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!请你借助计算机准确地计算,到底需要多少粒麦子。
展开
2个回答
展开全部
#include "iostream"
#include <vector>
using namespace std;
void CalcRice(int count)
{
vector<double> totals;
if (count > 0)
{
//第一格为1
totals.push_back(1);
}
while (totals.size() < count)
{
//此后每一格都是前面的数量 x2
totals.push_back(totals.back() * 2);
}
double sum = 0;
for (auto i = 0; i < totals.size(); ++i)
{
//统计结果。 数字可能超过32和64位整型表达范围,因此用double计算
sum += totals[i];
}
cout << sum << endl;
}
int main()
{
CalcRice(0);
CalcRice(32);
CalcRice(64);
system("pause");
}
//CalcRice函数就是计算全部谷粒数量
#include <vector>
using namespace std;
void CalcRice(int count)
{
vector<double> totals;
if (count > 0)
{
//第一格为1
totals.push_back(1);
}
while (totals.size() < count)
{
//此后每一格都是前面的数量 x2
totals.push_back(totals.back() * 2);
}
double sum = 0;
for (auto i = 0; i < totals.size(); ++i)
{
//统计结果。 数字可能超过32和64位整型表达范围,因此用double计算
sum += totals[i];
}
cout << sum << endl;
}
int main()
{
CalcRice(0);
CalcRice(32);
CalcRice(64);
system("pause");
}
//CalcRice函数就是计算全部谷粒数量
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询