Online Compiler C

#include <stdio.h> unsigned long long grains(int n) { unsigned long long sum = 1; while (n>1){ sum=sum*2; n--; } return sum; } int main() { int x; scanf("%d", &x); printf("%llu", grains(x)); return 0; }
这段代码计算的是第n个棋盘格上的麦粒数(2的n-1次方),而不是前n格的总和。题目通常要求计算前n格的总麦粒数。

- 你的循环从n>1开始,每次乘以2,这实际上计算的是2^(n-1),即第n格的数量。如果要计算总和,需要累加每一格的数量,而不是只乘2。
- 注意初始值sum=1对应第一格,但循环条件n>1会导致当n=1时直接返回1,这没问题;但n=2时循环一次得到2,这是第二格的数量,不是前两格的总和。