想请教一下,怎么用C语言写出阶乘相加啊

输入一个值n,输出从1到n的阶乘相加,因为刚开始学C语言没多久,所以不会做

循环遍历就可以了,参考:

#include <stdio.h>
int main()
{
    double t=1;
    int n,i;
    //输入n
    scanf("%d",&n);
    
    for(i=1;i<=n;i++)
    {
        //计算i的阶乘
        t *= i;
    }
    //输出
    printf("%lf",t);
    return 0;
}

下面是一个实现,供参考:

#include <stdio.h>

int main(void){
    
    int n;  //要计算到多少的阶乘 
    int i,j;   //循环变量 
    int sum =0;  //记录阶乘之和 
    int single=1; //记录单项阶乘 
    scanf("%d",&n);
    
    for(i=1;i<=n;i++){  //计算从1到n的阶乘 之和 
        
        for(j=1;j<=i;j++){  //计算从1到n每一项阶乘 
            single*=j;     //每个数的阶乘 
        }
        
        sum+=single;  //每项阶乘相加 
    }
    
    printf("1到%d的阶乘之和是:%d.\n",n,sum);
    
    return 0;
} 

这要看你n的取值范围有多大,如果很大的话,要用大数阶乘了,网上可以搜到。如果在double范围内,可以用double类型
定义一个阶乘函数,然后在主函数里循环调用

#include <stdio.h>
double jc(int n)
{
    double s = 1;
    for(int i=1;i<=n;i++)
      s *= i;
    return s;
}
int main()
{
    int n,i;
    double s = 0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        s += jc(i);
    printf("%lf",s);
    return 0;
}

阶乘实现用循环最简单,递归实现如下:


// 递归实现阶乘相加
#include <stdio.h>

//求n的阶乘
long factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    else {
        return factorial(n - 1) * n;  // 递归调用
    }
}

int main() {
    int n,i;
    long sum=0;
    printf("Input a number: ");
    scanf("%d", &n);
   for(i=1;i<n+1;i++)
  {
    sum= sum+factorial(n);
  }
    printf("sum = %ld\n", n,sum);

    return 0;
}


递归就是函数调用自身。要想理解递归函数,重点是理解它是如何逐层进入,又是如何逐层退出的。
递归函数都应该只进行有限次的递归调用,即必须有退出条件,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。
递归函数也只是一种解决问题的技巧,它和其它技巧一样,也存在某些缺陷,具体来说就是:递归函数的时间开销和内存开销都非常大,极端情况下会导致程序崩溃。同时测试输入数不要太大,太大会溢出。