源本科技 | 码上会

阶乘累加求和

2026/01/26
11
0

题目

1!+2!+3!++20!1! + 2! + 3! + \dots + 20! 的和。

说明

本题要求计算从 1 的阶乘到 20 的阶乘的累加和
其中,n!n!(读作“n 阶乘”)定义为:

n!=1×2×3××n(n1),0!=1n! = 1 \times 2 \times 3 \times \cdots \times n \quad (n \geq 1),\quad 0! = 1

题目中从1!1! 开始累加至20!20!,共 20 项。


运行示例

2561327494111820313

👈点击左箭头查看答案(一定要在自己思考并实现后再看参考答案哦!)

规律分析

我们采用递推方式计算阶乘,避免重复计算:

  • 初始化:fac = 1(表示1!=11! = 1

  • 第 1 次循环(i=1):fac = 1 * 1 = 11!1!

  • 第 2 次循环(i=2):fac = 1 * 2 = 22!2!

  • 第 3 次循环(i=3):fac = 2 * 3 = 63!3!

  • ...

  • 第 n 次循环:fac = (n-1)! * n = n!

同时,每轮将当前 fac 累加到 sum 中。

这种方式时间复杂度为O(n)O(n),空间复杂度为O(1)O(1),非常高效。


程序实现

public class Demo21 {
    public static void main(String[] args) {
        long sum = 0;
        long fac = 1;
        for (int i = 1; i <= 20; i++) {
            fac *= i;      // 计算 i!
            sum += fac;    // 累加到总和
        }
        System.out.println(sum);
    }
}

补充知识

  • 阶乘是组合数学、概率论、泰勒展开等领域的基础运算。

  • 注意:不要在循环内部用递归或重复乘法计算阶乘(如每次从 1 乘到 i),那样会导致时间复杂度升至O(n2)O(n^2),效率低下。

  • 本题体现了“利用前一步结果优化当前计算”的典型动态规划思想(尽管很简单)。


总结:本题虽简单,但涉及大数处理意识、算法效率、数据类型选择等重要编程素养,是初学者理解迭代与累积模式的经典例题。