L1-013 计算阶乘和(10分)[java][python]

4 阅读1分钟

题目编号: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) 时间内完成,避免重复计算。代码简洁,适合入门练习。