题目描述
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8X8共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。请问,国王能兑现他的许诺吗?共要多少麦子赏赐他的宰相?
如果格子数不是64呢?
输入
有多组测试数据。
每行输入一组测试数据,即输入一个格子数n (n不超过64)。
输出
与输入相对应,每行输出一个结果,即麦子总数(单位:粒)。
样例输入 Copy
3
64
样例输出 Copy
7
18446744073709551615
为什么我输入64的时候它输出0啊?有没有大佬解释下,然后把新的程序给我看一下,求求了
越界了啊,把long long sum=0改成unsigned long long sum=0;
printf哪里用%llu
运行结果如下:
代码修改如下:
#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