1.n不能大于20,否则数据会遗失:
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
long sum=0;
for(int i=1;i<=n;i++){
sum=sum+getFacSum(i); //求阶乘的和
}
System.out.println(sum);
}
//递归求阶乘
private static long getFacSum(int n){
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
return n*getFacSum(n-1);
}
}
}
2.n为任意正整数:
import java.math.BigInteger;
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
BigInteger sum=BigInteger.valueOf(0);
for(int i=1;i<=n;i++){
sum=sum.add(getFacSum(i));
}
System.out.println(sum);
}
//递归求阶乘
private static BigInteger getFacSum(int n){
if(n==1){
return BigInteger.valueOf(1);
}else if(n==2){
return BigInteger.valueOf(2);
}else{
return (BigInteger.valueOf(n)).multiply(getFacSum(n-1));
}
}
}