Online Compiler C

#include <stdio.h> int main() { int n; // 读入 n,n 最大只有 13,用 int 足够装 n if (scanf("%d", &n) != 1) { return 0; } // 【核心修改】把存放乘积结果的变量改成 long long 类型,防止 13! 溢出 long long result = 1; for (int i = 1; i <= n; i++) { result *= i; } // 【核心修改】占位符改成 %lld,专门用来打印 long long 类型的超大整数 printf("%lld\n", result); return 0; }
这段代码的功能是:读入一个整数 n,然后计算 n 的阶乘(n!),最后输出结果。代码已经注意到了 n 最大为 13 时 13! 会超过 int 范围,所以把 result 改成了 long long 类型,并使用了 %lld 来打印。

不过,代码中有一个潜在的问题:

- 当 n 为 0 时,0! 的结果应该是 1。你的循环从 i = 1 开始,当 n = 0 时循环不会执行,result 保持初始值 1,这看起来是正确的。但需要确认题目是否要求处理 n = 0 的情况。

- 另外,虽然 n 最大是 13,但 long long 可以安全存放 13!,所以类型选择没有问题。