题解
简单的阶乘
1 条题解
-
0
解题思路
阶乘的意思是:把从 1 到 n 的所有自然数一个一个乘起来。比如 5! = 1 × 2 × 3 × 4 × 5 = 120。
我们用一个变量 ans 来存乘积,初始值设为 1(因为 1 乘以任何数都不变,是乘法最合适的起点)。然后用一个循环变量 i 从 1 跑到 n,每次把 i 乘进 ans,我们一起来看过程:
- i = 1 时,ans = 1 × 1 = 1;
- i = 2 时,ans = 1 × 2 = 2;
- i = 3 时,ans = 2 × 3 = 6;
- i = 4 时,ans = 6 × 4 = 24;
- i = 5 时,ans = 24 × 5 = 120。
循环结束后,ans 就是 n!。
题目说 n 不超过 12,而 12! = 479001600,没有超过 int 能表示的范围,所以用 int 类型存放就够了,不用担心溢出。
还有一个特殊的边界:当 n = 0 时,按照定义 0! = 1。我们的循环从 i = 1 开始,当 n = 0 时循环一次都不执行,ans 保持初始值 1,正好就是 0! = 1 的答案,所以不用额外特判 n = 0 的情况。
参考代码
#include using namespace std;
int main() { int n; // n 表示要求阶乘的自然数 cin >> n; // 读入 n
int ans = 1; // ans 存放乘积结果,初始为 1(乘法起点) for (int i = 1; i <= n; i = i + 1) { // 让 i 从 1 一直乘到 n ans = ans * i; // 把 i 乘进结果里 } cout << ans << endl; // 输出 n! return 0;}
复杂度分析
题目中 n 表示要求阶乘的数,最大为 12。循环从 i = 1 执行到 i = n,一共执行 n 次乘法,所以时间复杂度是 O(n)。即使 n = 12 也只需要 12 次运算,非常快。程序只用了两个 int 变量,空间占用固定,与 n 无关,空间复杂度是 O(1)。
- 1