当前位置: 首页 > news >正文

洛谷P1009_大整数类

P1009 [NOIP 1998 普及组] 阶乘之和

题目描述

用高精度计算出S=1!+2!+3!+⋯+n!S = 1! + 2! + 3! + \cdots + n!S=1!+2!+3!++n!n≤50n \le 50n50)。

其中!表示阶乘,定义为n!=n×(n−1)×(n−2)×⋯×1n!=n\times (n-1)\times (n-2)\times \cdots \times 1n!=n×(n1)×(n2)××1。例如,5!=5×4×3×2×1=1205! = 5 \times 4 \times 3 \times 2 \times 1=1205!=5×4×3×2×1=120

输入格式

一个正整数nnn

输出格式

一个正整数SSS,表示计算结果。

输入输出样例 #1

输入 #1

3

输出 #1

9

说明/提示

【数据范围】

对于100%100 \%100%的数据,1≤n≤501 \le n \le 501n50

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有n≤20n \le 20n20,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

NOIP1998 普及组 第二题

解法

  • 解题逻辑思路很简单,使用循环即可,难点在于当n>20后,计算结果已经超过long的范围了,此时就要使用Java中的大整数类BigInteger

大整数类 BigInteger

  • 作用:用于处理任意精度的整数,无溢出限制,当long的范围不够使用时,就要使用BigInteger来代替long
  • 用法:
  1. 导包:需要导入java.math.BigInteger
  2. 声明并初始化一个BigInteger的对象。
    • 初始化为0:BigInteger n = BigInteger.ZERO;
    • 初始化为1:BigInteger n = BigInteger.ONE;
    • 初始化为其他数字:BigInteger n =BigInteger.valueOf(i);i为数字
  3. 调用加减乘除方法:BigInteger与long不同,不是基本数据类型,而是一个类,不能直接使用±*/来进行四则运算,需要调用对应的运算方法,传入的参数也必须是BigInteger类型的对象,如果不是则需要先将参数初始化为BigInteger的对象
    • 加法:add(BigInteger)n=n.add(BigInteger.valueOf(i))
    • 减法:subtract(BigInteger)n=n.subtract(BigInteger.valueOf(i))
    • 乘法:multiply(BigInteger)n=n.multiply(BigInteger.valueOf(i))
    • 除法:divide(BigInteger)n=n.divide(BigInteger.valueOf(i))
  4. 输出直接使用sout输出即可

题解

packageP1009;importjava.util.*;importjava.math.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();BigIntegersum=BigInteger.ZERO;BigIntegerproduct=BigInteger.ONE;for(inti=1;i<=n;i++){product=product.multiply(BigInteger.valueOf(i));sum=sum.add(product);}System.out.println(sum);}}
http://www.jsqmd.com/news/353459/

相关文章:

  • VS Code中cl.exe构建调试的终极指南:如何绕过Developer Command Prompt限制
  • 【仅限首批200家医联体开放】:Docker 27医疗加密容器预编译镜像库(含NVIDIA Clara、MONAI、OpenMRS适配版)
  • 深入CANN ops-nn:揭秘AIGC高性能算子开发实战
  • Docker 27车载容器崩溃频发?揭秘内核级OOM Killer误杀机制及实时防护策略
  • 从零开始:Chatbot安装的完整指南与常见避坑实践
  • Docker 27边缘节点编排:为什么83%的制造企业升级失败?资深架构师逆向复盘11类典型故障日志与修复命令集
  • ChatTTS流式传输实战:从协议设计到性能优化
  • CosyVoice微调实战:从零构建高效语音合成模型的避坑指南
  • 基于51单片机的毕设效率提升实战:从轮询阻塞到事件驱动架构
  • 毕业设计校园在线点餐系统:从单体架构到高并发服务的技术演进与避坑指南
  • 从零构建Chatbot UI:React实战指南与常见陷阱解析
  • Python智能客服课程设计:从NLP到对话管理的实战指南
  • Docker 27镜像兼容性黄金 checklist(仅限内部团队使用的12项自动化检测脚本,含GitHub Action一键集成版)
  • 【限时技术窗口期】:Docker 27.0–27.3是最后支持ARM64裸机直启编排的版本序列——6个月后强制要求Secure Boot签名!
  • 智能客服Agent实战:基于LLM的高效对话系统架构与避坑指南
  • 从机械按键到智能交互:STM32定时器在非阻塞式设计中的进化之路
  • IMX6ULL开发板硬件适配秘籍:BSP移植中的核心板与底板设计哲学
  • Chatbot聊天记录存储方案全解析:从本地存储到云端持久化
  • ChatTTS语音合成实战:如何通过Prompt控制实现精准停顿(Break)插入
  • 基于Dify构建智能客服问答系统的实战指南:从架构设计到生产环境部署
  • 2026年可靠的玻璃钢冷却塔,方形冷却塔厂家行业精选名录 - 品牌鉴赏师
  • Flamingo架构解密:从视觉压缩到语言生成的跨模态桥梁
  • 基于Dify Agent构建智能客服知识库与业务数据查询系统的架构设计与实践
  • 2026市场比较好的徐州全包装修公司排行 - 品牌排行榜
  • Android毕设实战:从零构建高可用校园服务App的完整技术路径
  • AI辅助开发实战:如何构建高精度智能客服评测集
  • 美食计算机毕业设计实战:从需求分析到高可用架构落地
  • 金融智能客服架构设计:基于AI辅助开发的高并发实践与优化
  • ChatTTS实战指南:从语音合成到生产环境部署的完整解决方案
  • 深入解析 CosyVoice TypeError: argument of type ‘NoneType‘ is not iterable 的根源与解决方案