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

#include <stdio.h> unsigned long long grains(int n){ return 1ULL<<(n-1); }
这段代码定义了一个函数 `grains`,它接受一个整数 `n`,并返回 `1ULL << (n-1)` 的结果。这个表达式计算的是 2 的 (n-1) 次方,因为左移一位相当于乘以 2。看起来这个函数可能是用来计算棋盘上第 n 个格子上的麦粒数(经典的麦粒问题)。

- 注意,当 `n` 为 0 或负数时,`n-1` 会变成负数,左移负位数在 C 语言中是未定义行为,可能导致程序出错。你需要考虑如何处理 `n` 小于 1 的情况。
- 另外,当 `n` 很大时(比如 64 或更大),左移的结果可能超出 `unsigned long long` 的表示范围,导致溢出。你需要思考如何限制输入范围或处理边界情况。