题目描述
用高精度计算出 S = 1! + 2! + 3! + ··· + n!(n<=50)。
其中“!”表示阶乘,例如:5! = 5 × 4 ×3 × 2 ×1。
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入 #1
3
输出 #1
9
说明/提示
【数据范围】
对于100% 的数据,1≤n≤50。
import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int n = sc.nextInt();
BigInteger sum = new BigInteger("0");
for (int i = 1; i <= n; i++) {
sum = sum.add(f(i));
}
System.out.println(sum);
}
public static BigInteger f(int n) {
BigInteger x = new BigInteger("1");
for (int i = 2; i <= n; i++) {
x = x.multiply(new BigInteger(Integer.toString(i)));
}
return x;
}
}
对于java中的高精度问题来说有封装好的两种类分别对应高精度整数和高精度浮点数,分别为BigInteger和BigDecimal。封装好的方法有add(), multiply(), subtract(), divide(), abs(), pow(), mod(), negate(), compareTo(), valueOf(), max(), min()。