求s=1!+2!+3!+……+n!的和

求s=1!+2!+3!+……+n!的和从键盘输入n得值(n小于50),并输出运行结果


#include <stdio.h>

int main() {
    int n, i, j, factorial = 1, sum = 0;

    printf("Enter a value for n (n < 50): ");
    scanf("%d", &n);

    for (i = 1; i <= n; i++) {
        factorial = 1;
        for (j = 1; j <= i; j++) {
            factorial *= j;
        }
        sum += factorial;
    }

    printf("The sum of the factorials from 1 to %d is: %d\n", n, sum);

    return 0;
}

首先从键盘输入一个小于50的整数n,然后使用两个for循环计算并累加1到n的阶乘。内层循环计算i的阶乘,外层循环遍历1到n,并将每个阶乘加入总和中。最后输出总和的结果。

参考如下,一层for循环搞定

 
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    printf("Input n(n < 50): ");
    scanf("%d", &n);

    long long i, ret = 1, sum = 0;

    for (i = 1; i <= n; i++)
    {
        ret *= i;
        sum += ret;
    }

    printf("sum = %lld", sum);
    return 0;
}

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1056581
  • 这篇博客你也可以参考下:编程计算:s=1!+2!+...+n!
  • 除此之外, 这篇博客: C与C++程序设计学习笔记中的 5、求s=1+2!+3!+4!+……+19!+20! 的值(n!表示n的阶乘)。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h>
    int main(void)
    {
    	long long k = 1, sum = 0, i = 0;
    	for (i = 1; i <= 20; i++)
    	{
    		k *= i;
    		sum += k;
    	}
    	printf("%lld\n", sum);
    	return 0;
    }
    

  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析

    本题实质上考察的是对斐波那契数列的求解方法。斐波那契数列是一种数字序列,特别指的是以下的这个数字序列:0、1、1、2、3、5、8、13、21、34、……(前两个数字是 0 和 1)。这个数列从第 3 项开始,每一项都等于前两项之和。 本题的核心要点是通过递归的方式计算斐波那契数列。

    问题解决

    使用递归方式计算斐波那契数列,然后在程序中添加提示语句即可。

    用代码实现

    以下是具体代码实现,通过自定义函数调用递归方式进行计算:

    #include<stdio.h>
    #include<stdlib.h>
    int P(int n){
        if(n==0){
            return 0;
        }
        if(n==1){
            return 1;
        }
        return P(n-1)+P(n-2);
    }
    int main(){
        int n,fib;
        printf("请输入n的值:");
        scanf("%d",&n);
        if(n>100){
            printf("请输入小于100的数");
            exit(0);
        }
        fib=P(n);
        printf("斐波那契数列第n项是:%d",fib);
        return 0;
    }
    

    总结

    本题极大的考点不仅在于对斐波那契数列的递归思想的考察,更重要的在于我们的代码编码能力和技术执行能力。因此,无论是对语法的熟练掌握,还是方法的理解与掌握都具有非常实际的现实意义。希望我们在接下来的学习过程中,能够更加优秀。

这个问题用两层的for循环就可以搞定的嘛,例如下面这个代码:

#include <stdio.h>

int main() {
    int n, i, j;
    long long s = 0, f = 1;
    printf("请输入n的值:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        f = 1;
        for (j = 1; j <= i; j++) {
            f *= j;
        }
        s += f;
    }
    printf("%d的阶乘之和为%lld\n", n, s);
    return 0;
}