国王的许诺

国王的许诺

相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8x8共64格的象棋说:陛下,请您赏给我一些麦子吧。就在棋盘的第1格放1粒,第2格放2粒,第三格放4粒,以后每一格都比前一格增加一位,依此放完棋盘一64格,我就感激不尽了。舍罕王让人扛了一袋麦子,他要兑现他的许诺。请问国王能兑现他的许诺吗?编程计算共需要多少麦子赏赐他的宰相,这些麦子合多少立方米(已知1立方米麦子约1.42x10^8粒)。
设计思路:

  1. 计算每格的麦子数量。(即求得通项)
  2. 累加求和64格的麦子。注意:变量类型的定义!

代码实现:

#include "stdio.h"
main()
{
    //int 2147483648
    int i;
    float sum=0;
    for(i=1;i<=64;i++)
    {
        float n=pow(2,i-1);         //粒数
        float m=n/(1.42*pow(10,8)); //立方米形式表示
        sum+=m;   //累加
        //printf("第%2d格\t%20.0f粒\t%15f立方米麦子。\n",i,n,m);
        //上句printf用于验证每格放入的麦子数
    }
    printf("\n共有麦子%.2f立方米。\n",sum);
}

运行结果:
国王的许诺_第1张图片
数据类型知识补充
国王的许诺_第2张图片
说明:

int型数据的标识范围有限,该题目的计算结果不能用整形变量来准确表示和存储,因此,我定义了float变量来存储结果,基本数据类型的有效表示范围如上表所示。

你可能感兴趣的:(C语言编程)