洛谷P1009_大整数类

📅 发布时间:2026/7/8 10:24:32 👁️ 浏览次数:
洛谷P1009_大整数类
P1009 [NOIP 1998 普及组] 阶乘之和题目描述用高精度计算出S1!2!3!⋯n!S 1! 2! 3! \cdots n!S1!2!3!⋯n!n≤50n \le 50n≤50。其中!表示阶乘定义为n!n×(n−1)×(n−2)×⋯×1n!n\times (n-1)\times (n-2)\times \cdots \times 1n!n×(n−1)×(n−2)×⋯×1。例如5!5×4×3×2×11205! 5 \times 4 \times 3 \times 2 \times 11205!5×4×3×2×1120。输入格式一个正整数nnn。输出格式一个正整数SSS表示计算结果。输入输出样例 #1输入 #13输出 #19说明/提示【数据范围】对于100%100 \%100%的数据1≤n≤501 \le n \le 501≤n≤50。【其他说明】注《深入浅出基础篇》中使用本题作为例题但是其数据范围只有n≤20n \le 20n≤20使用书中的代码无法通过本题。如果希望通过本题请继续学习第八章高精度的知识。NOIP1998 普及组 第二题解法解题逻辑思路很简单使用循环即可难点在于当n20后计算结果已经超过long的范围了此时就要使用Java中的大整数类BigInteger大整数类 BigInteger作用用于处理任意精度的整数无溢出限制当long的范围不够使用时就要使用BigInteger来代替long用法导包需要导入java.math.BigInteger包声明并初始化一个BigInteger的对象。初始化为0BigInteger n BigInteger.ZERO;初始化为1BigInteger n BigInteger.ONE;初始化为其他数字BigInteger n BigInteger.valueOf(i);i为数字调用加减乘除方法BigInteger与long不同不是基本数据类型而是一个类不能直接使用±*/来进行四则运算需要调用对应的运算方法传入的参数也必须是BigInteger类型的对象如果不是则需要先将参数初始化为BigInteger的对象加法add(BigInteger)nn.add(BigInteger.valueOf(i))减法subtract(BigInteger)nn.subtract(BigInteger.valueOf(i))乘法multiply(BigInteger)nn.multiply(BigInteger.valueOf(i))除法divide(BigInteger)nn.divide(BigInteger.valueOf(i))输出直接使用sout输出即可题解packageP1009;importjava.util.*;importjava.math.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intnsc.nextInt();BigIntegersumBigInteger.ZERO;BigIntegerproductBigInteger.ONE;for(inti1;in;i){productproduct.multiply(BigInteger.valueOf(i));sumsum.add(product);}System.out.println(sum);}}