Online Compiler C

#include <stdio.h> unsigned long long grains(int n){ int x =1; for (int i = 1; i <=n; i++) { x=2*x; } return x; } int main() { printf("%d\n", unsigned long long grains(3)); return 0; }
这段代码试图计算棋盘上第n个格子的麦粒数(第1格1粒,第2格2粒,第3格4粒,以此类推),但存在几个问题。

- 函数`grains`中变量`x`被声明为`int`类型,但返回值是`unsigned long long`,当n较大时`int`会溢出,导致结果错误。
- `main`函数中调用`grains`的语法不正确,不能直接在`printf`里写类型名。

- 检查`grains`函数内部:`x`的类型应该与返回值类型一致,否则计算过程中就会丢失精度。
- 检查`main`函数中`printf`的格式:调用函数时只需写函数名和参数,不需要写返回类型。