题目编号:L1-013
分数:10分
语言:Java、Python
题目描述
对于给定的正整数 N,需要你计算 S = 1! + 2! + 3! + ... + N!。
输入格式
输入在一行中给出一个不超过 10 的正整数 N。
输出格式
在一行中输出 S 的值。
输入样例
3
输出样例
9
解题思路
累计计算每个数的阶乘并求和。可以利用递推关系:i! = (i-1)! * i,避免重复计算。
关键点:
- 利用递推:每次用上一个阶乘值乘以当前 i,得到当前阶乘
- N 不超过 10,所以 10! = 3628800,int 范围内不溢出
- 逐步累加各阶乘即可
代码实现
Java 实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long sum = 0;
long factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
sum += factorial;
}
System.out.println(sum);
}
}
Python 实现
n = int(input())
s = 0
factorial = 1
for i in range(1, n + 1):
factorial *= i
s += factorial
print(s)
运行验证
输入:
3
计算过程:1! = 1,2! = 2,3! = 6,S = 1 + 2 + 6 = 9
Java / Python 输出:
9
与样例一致,通过验证。
复杂度分析
- 时间复杂度:O(N),一次遍历
- 空间复杂度:O(1),只需常数空间
总结
本题是基础阶乘求和问题。利用递推关系 i! = (i-1)! * i 可以在 O(N) 时间内完成,避免重复计算。代码简洁,适合入门练习。