趣味程序设计_舍罕王的失算

题目描述
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8X8共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。请问,国王能兑现他的许诺吗?共要多少麦子赏赐他的宰相?

如果格子数不是64呢?

输入
有多组测试数据。

每行输入一组测试数据,即输入一个格子数n (n不超过64)。

输出
与输入相对应,每行输出一个结果,即麦子总数(单位:粒)。

样例输入 Copy
3
64
样例输出 Copy
7
18446744073709551615

为什么我输入64的时候它输出0啊?有没有大佬解释下,然后把新的程序给我看一下,求求了

img

越界了啊,把long long sum=0改成unsigned long long sum=0;
printf哪里用%llu
运行结果如下:

img

代码修改如下:

#include<stdio.h>
#include<math.h>

int main()
{
    int n,i;
    unsigned long long sum = 0;
    while(scanf("%d",&n)!= EOF)
    {
        sum = 0;
        for(i=1;i<=n;i++)
        {
            sum += pow(2.0,i-1);
        }
        printf("%llu\n",sum);
    }
    return 0;
}


CSDN要求发问题要有自己的思考
把sum改成double型
当输入64时 ,正好long long型溢出为0