Онлайн компилятор C

#include <stdio.h> unsigned long long grains(int n) { unsigned long long result = 1; for (int i = 1; i < n; i++) { result*=2; } return result; }
这段代码定义了一个函数 `grains`,它接收一个整数 `n`,并返回 `unsigned long long` 类型的值。函数内部通过循环计算 2 的 (n-1) 次方,初始值 `result` 为 1,然后循环 n-1 次每次乘以 2。这个函数可能用于计算棋盘上第 n 个格子的麦粒数(经典的国际象棋麦粒问题)。

- 注意循环的起始条件:`i` 从 1 开始,循环到 `i < n`,所以当 `n` 为 1 时循环不会执行,`result` 保持为 1,这符合 2 的 0 次方等于 1 的数学结果。但你需要确认这是否符合题目对第 1 个格子的定义。
- 考虑边界情况:如果 `n` 小于等于 0,函数会返回 1,这可能不是期望的结果。另外,当 `n` 较大时(比如 64),`unsigned long long` 可能溢出,需要思考如何处理这种情况。