题目

读入 n,计算 n 的阶乘

思路

本题计算 n!(0! 定义为 1)。

读非负 n,令 fact=1,用 i 从 2 乘到 n,每轮 fact *= in==0 时不进循环。注意用 long long 防溢出。

解题分析

0! 定义为 1,循环从 2 乘到 n。n 稍大就要 long long,再大则溢出,题目需约定 n 上限。

完整程序

#include <stdio.h>

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 0) {
        return 1;
    }
    long long fact = 1;
    for (int i = 2; i <= n; i++) {
        fact *= i;
    }
    printf("%lld\n", fact);
    return 0;
}

运行示例

输入:

5

输出:

120

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

递归求阶乘

程序:

#include <stdio.h>

static long long fact(int n)
{
    if (n <= 1) {
        return 1;
    }
    return n * fact(n - 1);
}

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 0) {
        return 1;
    }
    printf("%lld\n", fact(n));
    return 0;
}

运行示例

输入:

5

输出:

120