C语言编程求奇数阶乘的和

如何用c语言求任意个奇数阶乘的和,如输入3则为1!+3!+5!=


#include <stdio.h>

// 求n的阶乘
int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

int main() {
    int n, sum = 0;

    printf("请输入一个奇数n:");
    scanf("%d", &n);

    // 根据n求出奇数阶乘的和
    for (int i = 1; i <= n; i += 2) {
        sum += factorial(i);
    }

    printf("%d的奇数阶乘之和为%d\n", n, sum);

    return 0;
}

#include<stdio.h>
int main()
{
    int a=1,i,n, sum = 0;
    scanf("%d", &n);
 
    for (i = 1; i < n*2; i++) {
        a*=i;
        if(i%2)
            sum += a;
    }
 
    printf("%d", sum);
 
    return 0;
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7598062
  • 这篇博客也不错, 你可以看下C语言实现求1!+2!+3!+···+10!之和
  • 除此之外, 这篇博客: C语言程序设计经典例题(考研必背)(基础篇)第一周中的 十九,编程1!+2!+3!+4!+5!+6!…的值 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h>
    
    int main()
    {
    	int i, j, k, sum=0,ret = 1;
    	scanf("%d",&k);
    	for ( i = 1; i <=k ; i++)
    	{
    		ret = i*ret;
    		sum = sum + ret;
    	}
    	printf("%d", sum);
    	
    	return 0;
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    思路:

    本题需要求任意个奇数阶乘的和,先考虑如何求某个奇数阶乘的结果。

    可以使用for循环将每个奇数的阶乘一个一个相加,同时在计算阶乘的时候需要注意数据类型,可以使用unsigned long long来存储结果。 对于任意个奇数阶乘的和,可以先使用scanf获取输入的数值k,然后使用for循环,将每个奇数阶乘的结果计算出来即可。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    unsigned long long factorial(int n)
    {
        unsigned long long result = 1;
        for (int i = 1; i <= n; i += 2) {
            result *= i;
        }
    
        return result;
    }
    
    int main()
    {
        int k;
        unsigned long long sum = 0;
        scanf("%d", &k);
        for (int i = 1; i <= k; i++) {
            sum += factorial(i);
        }
    
        printf("%llu\n", sum);
        return 0;
    }
    

    解释:

    1. 首先定义了一个函数factorial用于计算n的阶乘,因为本题只需要奇数阶乘,所以for循环中i每次增加2。

    2. 在main函数中,先输入了k的值,随后使用for循环,将每个奇数阶乘的结果计算出来并相加到sum变量中。

    3. 最后输出sum的值。

    时间复杂度:

    由于本题只需要计算任意个奇数阶乘,因此时间复杂度为O(k),其中k为输入的值。

    注意:由于阶乘的计算容易越界,所以需要使用unsigned long long类型存储结果。

供参考:

#include <stdio.h>
int main()
{
    int  i, n;
    long long int sum, tmp;
    scanf("%d", &n);
    for (i = 1, tmp = 1, sum = 0; n--; i += 2)
    {
        if (i != 1)
            tmp *= i * (i - 1);
        sum += tmp;
    }
    printf("%lld", sum);
    return 0;
}