小白求解,表示一脸蒙蔽

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字

首先你要回求单个阶乘
像 4!=4*3*2*1
10! 等阶乘的求法
然后for 循环将阶乘结果相加即可
代码如下:

//求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字

#include<stdio.h>
int jiecheng(int n,int num)
{
    num = num*n;
    if(n != 1)
        jiecheng(n-1,num);
    else
        return num;
}
int main()
{
    int n;
    printf("题目描述:\n\t求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字\n");
    printf("请输入数字 n: \n");
    scanf("%d",&n);
    int sn = 0;
    for(int i = 1;i<=n;i++)
    {
        sn = sn + jiecheng(i,1);
    }
    printf("结果输出:\n\t%d",sn);
    return 0;
}


图片说明

import java.math.BigInteger;
import java.util.Scanner;

public class Test {

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("输入n的值");
    int n = s.nextInt();
    s.close();
    BigInteger sum = BigInteger.ZERO;
    for (int j = 1; j <= n; j++) {
        BigInteger bi = BigInteger.ONE;
        BigInteger i = BigInteger.valueOf(j);

        while (i.compareTo(BigInteger.ZERO) > 0) {
            bi = bi.multiply(i);
            i = i.subtract(BigInteger.ONE);

        }
        sum = sum.add(bi);
    }
    System.out.println(sum);

}

}
快要下班了,临时给你写个程序,可以直接运行!


int sn = 0;
int temp;
for(int i = 1;i<n;i++){
    temp = 1;
    for(int j = 1;j<=i;j++){
            temp*=j;
        }
        sn+=temp;
}


上面的算法可以优化一下,不过这种算法有个问题是n好像不能大于20,因为VC中int是4个字节
int sn = 0;
int temp=1;
for(int i = 1;i<n;i++){
temp *= n;
sn+=temp;
}

int nn[10];
void init()
{
memset(nn,0,sizeof(int)*10);
for(int i=1;i<=10;i++)
{
if(i==1)nn[0]=1;
else nn[i-1]=nn[n-2]*i;
}
}

void calc(int n)
{
int sum=0;
for(int j=0;j<n;j++)
{
sum += nn[j];
}
printf("%d",sum);
}