1 条题解

  • 0
    @ 2026-6-19 10:30:16

    📝 题目大意

    给定非负整数 NN,计算 f(N)f(N) 的值。其中 f(0)=1f(0)=1f(k)=k×f(k1)f(k)=k \times f(k-1)。本质上就是求 NN 的阶乘 N!N!

    💡 解题思路

    1. 题目分析:根据定义,f(N)=N×(N1)××1=N!f(N) = N \times (N-1) \times \cdots \times 1 = N!,且 f(0)=1f(0)=1。数据范围 0N100 \leq N \leq 1010!=3,628,80010! = 3,628,800,完全在 int 范围内,无需考虑溢出。

    2. 算法推导:使用迭代法计算阶乘。初始化 ans = 1,然后遍历 ii11NN,每次令 ans *= i。当 N=0N=0 时,循环不执行,ans 保持为 11,恰好满足 f(0)=1f(0)=1

    3. 边界与细节:唯一需要注意的边界是 N=0N=0,此时循环不进入,直接输出 11,与定义一致。无需处理任何特殊情况。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需一次从 11NN 的循环。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int n; scanf("%d", &n);  // 读入非负整数 N
    	int ans = 1;             // 初始化答案为 1(对应 f(0) = 1)
    	for (int i = 1; i <= n; i++)
    		ans *= i;            // 迭代累乘,计算 N 的阶乘
    	printf("%d\n", ans);     // 输出结果
    	return 0;
    }
    
    • 1

    信息

    ID
    644
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者