如何用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;
}
#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;
}
思路:
本题需要求任意个奇数阶乘的和,先考虑如何求某个奇数阶乘的结果。
可以使用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;
}
解释:
首先定义了一个函数factorial用于计算n的阶乘,因为本题只需要奇数阶乘,所以for循环中i每次增加2。
在main函数中,先输入了k的值,随后使用for循环,将每个奇数阶乘的结果计算出来并相加到sum变量中。
最后输出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;
}