Online Compiler C

#include <stdio.h> unsigned long long grains(int n) { unsigned long long a = 1; for (int i = 1; i<=n-1; i ++) { a *= 2; } return a;
这段代码定义了一个函数 `grains`,它计算棋盘上第 `n` 个格子上的麦粒数(第一个格子1粒,第二个2粒,第三个4粒,以此类推)。函数通过循环将1乘以2的 `n-1` 次方来得到结果。

- 你的循环条件 `i<=n-1` 是正确的,但注意当 `n` 为1时,循环不会执行,`a` 保持为1,这符合预期。不过,你可以思考一下循环的写法是否还有更简洁的方式。
- 函数返回类型是 `unsigned long long`,但注意当 `n` 较大时,乘法可能会溢出。你的代码没有处理这种情况,但这不是当前的主要问题。