【详解】使用java解决-求1+2!+3!+…+20!的和。

目录

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

1. 阶乘的基本概念

2. Java代码实现

2.1 计算单个数的阶乘

2.2 计算1到20的阶乘之和

2.3 运行结果

3. 性能优化

3.1 运行结果

代码解释:

注意事项:

代码解释

注意事项


使用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​​ 类。
  • 性能优化:
  • 在实际应用中,如果需要频繁计算阶乘,可以考虑使用缓存(例如,使用一个数组或哈希表)来存储已经计算过的阶乘值,以避免重复计算。

希望这个示例对你有帮助!如果有任何问题或需要进一步的解释,请随时提问。

Read more

《前端文件下载实战:从原理到最佳实践》

《前端文件下载实战:从原理到最佳实践》

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[[email protected]] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? * 专栏导航: 码农阿豪系列专栏导航 面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️ Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻 Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡 全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀 目录 * 《前端文件下载实战:从原理到最佳实践》 * 引言 * 一、需求背景与初始实现 * 1.1 业务需求 * 1.2 初始后端实现 * 1.3

By Ne0inhk
【OpenClaw从入门到精通】第04篇:Web/TUI/钉钉全打通!OpenClaw多端交互实测指南(2026避坑版)

【OpenClaw从入门到精通】第04篇:Web/TUI/钉钉全打通!OpenClaw多端交互实测指南(2026避坑版)

摘要:本文聚焦OpenClaw三大核心交互方式,针对新手“不知如何与AI助理沟通”的痛点,提供Web控制台、TUI终端、聊天软件(以钉钉为核心)的完整实操流程。Web控制台适配电脑端深度配置,TUI终端适合服务器远程维护,聊天软件满足手机端移动办公,三者协同实现“随时随地召唤AI”。文中包含2026实测的命令代码、配置步骤、问题排查方案,所有案例为虚拟构建,代码未上传GitHub,兼顾新手入门与进阶实操,帮助读者快速打通多端交互,最大化OpenClaw使用效率。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:高并发+性能调优终极实战】【Coze搞钱实战:零代码打造吸金AI助手】

By Ne0inhk
【DGX Spark 实战】部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)-修订

【DGX Spark 实战】部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)-修订

感谢Qwen3-Coder-Next-FP8为本文进行润色,调整,绘制架构图。但是所有的文字及链接经过手工修订。需要SGLang推理框架,移步 【DGX Spark 实战】部署SGLang,千问3.5-27B模型初探 我们已严格按您提供的原始内容(包括 CUDA_VERSION=130、CPU_ARCH=aarch64、路径 ~/vllm、用户 admin 等)进行全量修正与标准化,确保所有命令与 DGX Spark 实际环境一致。 摘要本文详细记录在 NVIDIA DGX Spark(Grace Blackwell 架构)上部署 vLLM 推理服务并接入 Open WebUI 的完整流程,包含 FlashAttention 编译、vLLM wheel 安装、Qwen3-Coder-Next-FP8

By Ne0inhk