链接:https://ac.nowcoder.com/acm/contest/27274/D 来源:牛客网
题目描述
用高精度计算出S=1!+2!+3!+…+n!(n ≤ 50)其中“!”表示阶乘,例如:5!=54321。
输入描述: 输入正整数N
输出描述: 输出计算结果S
示例1
输入
3
输出
9
首先对应阶乘的概念就是一直乘,一开始用C语言开了unsigned long long 但是还是爆了内存,因为50的阶乘实在是太大了。后来在一个算法交流群友学长点名Java可以用BigInteger去解决大数的问题。
首先扩展一下知识点,使用BigInteger的话要在前面写一行
import java.math.BigInteger;
其次的话这个BigInteger的使用也有一些规定
你可以把 BigInteger cnt = new BigInteger("1"); 理解为 int cnt = 1;
但是他的加减乘除不是通过运算符来进行的。
加法这样
BigInteger a= new BigInteger(“23”);
a=a. add(5);
这样的话a的值就变成了23+5=28。
减法就是把add换成subtract,乘法就是add换成multiply,divide就是除法。
再然后的话就是BigInteger的运算的话里面的括号必须也是这个类型的,如果说不是的话要进行一次转换
比如说a=a.multiply(BigInteger.valueOf(e));就是一个把int型的数放在BigInteger里面使用。
内容现在基本都讲完了,现在就是放代码的时间了
import java.util.Scanner;
import java.math.BigInteger;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
BigInteger sum=new BigInteger("0");
for(int i=1;i<=n;i++)
{
BigInteger a= new BigInteger("1");
for(int e=1;e<=i;e++)
{
a=a.multiply(BigInteger.valueOf(e));
}
sum=sum.add(a);
}
System.out.println(sum);
}
}