5. 放麦子
/*
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,
问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,
在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,
在第4个棋盘格放8粒麦子,......后一格的数字是前一格的两倍,
直到放完所有棋盘格(国际象棋共有64格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。
答案写在“解答.txt”中,不要写在这里!
#include<iostream>
using namespace std;
void aa(int *s, int &n, int a)
{
for(int i=n; i>=0; i--)
{
s[i+1] = s[i];
}
s[0] = a;
n++;
}
void change(int *s, int &n)
{
int temp = 0;
int a = 0;
for(int i=n; i>=0; i--)
{
if(s[i] >= 10)
{
temp = s[i];
s[i] = s[i]%10;
if(i-1 >= 0)
s[i-1] = s[i-1]+temp/10;
else
a = temp/10;
}
}
if(a != 0)
aa(s, n, a);
}
void op()
{
int n = 0;
int s[100];
s[0] = 1;
for(int i=1; i<64; i++)
{
for(int j=0; j<=n; j++)
s[j] = s[j]*2;
change(s, n);
}
for(int t=0; t<=n; t++)
{
cout<<s[t];
}
cout<<endl;
}
int main()
{
op();
return 0;
}