链接: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);
    }
}