题目
读入 n,计算 n 的阶乘
思路
本题计算 n!(0! 定义为 1)。
读非负 n,令 fact=1,用 i 从 2 乘到 n,每轮 fact *= i。n==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