题目
从标准输入读入一个非负整数 n,计算并输出其阶乘 n!。约定 0! = 1。
输入格式:一行输入一个非负整数 n。
输出格式:输出一个整数表示 n! 的值,末尾换行。
数据范围与约定:0 ≤ n ≤ 20。
思路与算法
1. 阶乘的爆炸式增长
阶乘增长极快:12! 约 4.79×108(已接近 int 上限),20! 约为 2.43×1018(接近 64 位无符号上限)。本题必须使用 long 保存阶乘结果。
2. 边界 0! 的定义
数学上规定 0! = 1。初始化 fact = 1,循环从 i = 2 累乘到 n,当输入为 0 或 1 时能自然得到正确结果 1。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 阶乘增长极快(20! ≈ 2.43×10^18),必须使用 64 位 long
// 约定 0! = 1,初始值设为 1
long fact = 1;
for (int i = 2; i <= n; i++) {
fact *= i;
}
System.out.println(fact);
}
}运行示例
输入:
5输出:
120