题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 1个棋盘格放 1 粒麦子,在第 2 个棋盘格放 2 粒麦子,在第 3 个棋盘格放 4 粒麦子,在第 4 个棋盘格放 8粒麦子,......后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 64 格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。
问题分析
计算机模拟大整数运算,我才用的是每一个int类型作为这个数的一位,构造出一个大整数,然后对大整数进行运算,每一位按照进位规则进行进位就能得到最终结果。
代码实现
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int wei[100]={0};
wei[99]=1;
//根据等比数列求和公式可知总数的值为2的六十四次方减一
for(int i=1;i<=64;i++){//64次方
for(int j=0;j<100;j++){//对每一位进行操作
wei[j]*=2;
}
for(int j=99;j>=0;j--){//进位
if(wei[j]>9){
wei[j-1]+=wei[j]/10;
wei[j]%=10;
}
}
}
int count;
for(count=0;wei[count]==0;count++);//忽略前导0
while(count<100){//输出每一位
if(count==99){
printf("%d",wei[count]-1);
}else{
printf("%d",wei[count]);
}
count++;
}
return 0;
}