使用java求1+2!+3!+…+20!的和完整示例代码

 更新时间:2026年05月21日 09:36:03   作者:牛肉胡辣汤  
这篇文章主要介绍了使用java求1+2!+3!+…+20!和的相关资料,感叹号 !是阶乘的意思,如 2! 、3! 、4! 分别是1*2 、 1*2*3 、1*2*3*4,文中通过代码介绍的非常详细,需要的朋友可以参考下

使用Java解决求1+2!+3!+...+20!的和

在编程中,计算阶乘是一个常见的问题。阶乘(Factorial)通常表示为 ​​n!​​,定义为所有小于及等于该数的正整数的乘积,例如 ​​5! = 5 × 4 × 3 × 2 × 1 = 120​​。本文将介绍如何使用Java语言来求解从1到20的阶乘之和,即 ​​1 + 2! + 3! + ... + 20!​​。

1. 阶乘的基本概念

阶乘在数学中有着广泛的应用,尤其是在组合数学、概率论等领域。计算阶乘的一个简单方法是使用循环或递归。然而,对于较大的数,递归可能会导致栈溢出,因此推荐使用循环来实现。

2. Java代码实现

2.1 计算单个数的阶乘

首先,我们需要一个函数来计算单个数的阶乘。这里我们使用循环来实现:

public class FactorialSum {
    // 计算单个数的阶乘
    public static long factorial(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        long result = 1;
        for (int i = 2; i <= n; i++) {
            result *= i;
        }
        return result;
    }
}

2.2 计算1到20的阶乘之和

接下来,我们编写一个函数来计算从1到20的阶乘之和:

public class FactorialSum {
    // 计算单个数的阶乘
    public static long factorial(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        long result = 1;
        for (int i = 2; i <= n; i++) {
            result *= i;
        }
        return result;
    }

    // 计算1到20的阶乘之和
    public static long sumOfFactorials() {
        long sum = 0;
        for (int i = 1; i <= 20; i++) {
            sum += factorial(i);
        }
        return sum;
    }

    public static void main(String[] args) {
        long result = sumOfFactorials();
        System.out.println("1 + 2! + 3! + ... + 20! 的和为: " + result);
    }
}

2.3 运行结果

运行上述代码,输出结果如下:

1 + 2! + 3! + ... + 20! 的和为: 2561327494111820313

3. 性能优化

虽然上述代码已经可以正确计算出结果,但在处理更大的数时,性能可能会成为一个问题。为了提高性能,我们可以使用动态规划的思想,避免重复计算阶乘。

public class FactorialSumOptimized {
    // 计算1到20的阶乘之和(优化版)
    public static long sumOfFactorialsOptimized() {
        long sum = 0;
        long factorial = 1;
        for (int i = 1; i <= 20; i++) {
            factorial *= i;
            sum += factorial;
        }
        return sum;
    }

    public static void main(String[] args) {
        long result = sumOfFactorialsOptimized();
        System.out.println("1 + 2! + 3! + ... + 20! 的和为: " + result);
    }
}

3.1 运行结果

运行优化后的代码,输出结果与之前相同:

1 + 2! + 3! + ... + 20! 的和为: 2561327494111820313

下面是一个使用Java编写的程序,该程序计算并输出从1到20的阶乘之和(即1 + 2! + 3! + ... + 20!)。

public class FactorialSum {
    public static void main(String[] args) {
        long sum = 0; // 用于存储最终的和
        for (int i = 1; i <= 20; i++) {
            sum += factorial(i); // 计算每个数的阶乘,并累加到sum中
        }
        System.out.println("The sum of 1 + 2! + 3! + ... + 20! is: " + sum);
    }

    /**
     * 计算n的阶乘
     * @param n 需要计算阶乘的数
     * @return n的阶乘
     */
    public static long factorial(int n) {
        if (n == 0 || n == 1) {
            return 1;
        } else {
            long result = 1;
            for (int i = 2; i <= n; i++) {
                result *= i;
            }
            return result;
        }
    }
}

代码解释:

  1. 主方法 main​:
  • 定义一个变量 ​​sum​​ 来存储阶乘的和。
  • 使用一个 ​​for​​ 循环从1遍历到20,调用 ​​factorial​​ 方法计算每个数的阶乘,并将结果累加到 ​​sum​​ 中。
  • 最后,打印出计算得到的和。
  1. 阶乘方法 factorial​:
  • 接受一个整数 ​​n​​ 作为参数。
  • 如果 ​​n​​ 是0或1,直接返回1(因为0! = 1! = 1)。
  • 否则,使用一个 ​​for​​ 循环从2遍历到 ​​n​​,计算阶乘值并返回。

注意事项:

  • 由于20!是一个非常大的数,使用 ​​long​​ 类型来存储结果是合适的。如果需要处理更大的数,可以考虑使用 ​​BigInteger​​ 类。
  • 这个程序假设输入的范围是从1到20,因此没有进行额外的输入验证。

下面是一个详细的Java程序示例,用于计算1 + 2! + 3! + ... + 20! 的和。这个程序分为几个部分:计算阶乘的函数和主函数中调用该函数并累加结果。

public class FactorialSum {

    // 计算n的阶乘
    public static long factorial(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        long result = 1;
        for (int i = 2; i <= n; i++) {
            result *= i;
        }
        return result;
    }

    // 主函数
    public static void main(String[] args) {
        int n = 20; // 要计算的项数
        long sum = 0; // 存储总和

        // 计算1 + 2! + 3! + ... + 20!
        for (int i = 1; i <= n; i++) {
            sum += factorial(i);
        }

        // 输出结果
        System.out.println("1 + 2! + 3! + ... + 20! 的和是: " + sum);
    }
}

代码解释

  1. factorial​ 方法:
  • 这个方法用于计算给定整数 ​​n​​ 的阶乘。
  • 如果 ​​n​​ 是 0 或 1,直接返回 1(因为 0! 和 1! 都等于 1)。
  • 否则,初始化一个变量 ​​result​​ 为 1,然后从 2 循环到 ​​n​​,将每个数乘到 ​​result​​ 上。
  • 最后返回 ​​result​​。
  1. main​ 方法:
  • 定义一个变量 ​​n​​,表示要计算的项数(在这个例子中是 20)。
  • 初始化一个变量 ​​sum​​ 为 0,用于存储最终的和。
  • 使用一个 ​​for​​ 循环从 1 到 ​​n​​,在每次循环中调用 ​​factorial​​ 方法计算当前项的阶乘,并将其加到 ​​sum​​ 上。
  • 循环结束后,输出计算结果。

注意事项

  • 数据类型选择:
  • 由于阶乘增长非常快,即使是 20! 也已经是一个相当大的数,因此这里使用 ​​long​​ 类型来存储结果。如果需要计算更大的阶乘,可能需要使用 ​​BigInteger​​ 类。
  • 性能优化:
  • 在实际应用中,如果需要频繁计算阶乘,可以考虑使用缓存(例如,使用一个数组或哈希表)来存储已经计算过的阶乘值,以避免重复计算。

总结

到此这篇关于使用java求1+2!+3!+…+20!的和的文章就介绍到这了,更多相关java求1+2!+3!+…+20!的和内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Jackson实现数据脱敏的示例详解

    利用Jackson实现数据脱敏的示例详解

    在我们的企业项目中,为了保护用户隐私,数据脱敏成了必不可少的操作,那么我们怎么优雅的利用Jackson实现数据脱敏呢,本文就来和大家详细聊聊,希望对大家有所帮助
    2023-05-05
  • Java多线程编程之访问共享对象和数据的方法

    Java多线程编程之访问共享对象和数据的方法

    这篇文章主要介绍了Java多线程编程之访问共享对象和数据的方法,多个线程访问共享对象和数据的方式有两种情况,本文分别给出代码实例,需要的朋友可以参考下
    2015-05-05
  • Java JDK内置常用接口和深浅拷贝

    Java JDK内置常用接口和深浅拷贝

    这篇文章主要介绍了Java JDK内置常用接口和深浅拷贝,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Mybatis输入输出映射及动态SQL Review

    Mybatis输入输出映射及动态SQL Review

    这篇文章主要介绍了Mybatis输入输出映射及动态SQL Review,需要的朋友可以参考下
    2017-02-02
  • Java 提取照片的EXIF信息批量重命名

    Java 提取照片的EXIF信息批量重命名

    这篇文章主要介绍了Java 提取照片的EXIF信息批量重命名的方法,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04
  • Java编程数组中最大子矩阵简便解法实现代码

    Java编程数组中最大子矩阵简便解法实现代码

    这篇文章主要介绍了Java编程数组中最大子矩阵简便解法实现代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java实现PDF表格转换为CSV的示例代码

    Java实现PDF表格转换为CSV的示例代码

    在很多企业办公和数据分析的场景中,PDF 中常常存放着报表、清单或统计数据,本文将介绍如何借助 Free Spire.PDF for Java,在 Java 程序中完成 PDF 表格到 CSV 的自动转换,感兴趣的看了解下
    2025-08-08
  • spring-cloud-gateway降级的实现

    spring-cloud-gateway降级的实现

    这篇文章主要介绍了spring-cloud-gateway降级的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 详解java中import的作用

    详解java中import的作用

    这篇文章主要介绍了java中import作用,import与package机制相关,这里先从package入手,再讲述import以及static import的作用。
    2021-04-04
  • Java Unsafe创建对象的方法实现

    Java Unsafe创建对象的方法实现

    Java中使用Unsafe实例化对象是一项十分有趣而且强大的功能,本文主要介绍了Java Unsafe创建对象的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论