求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);
}