1!+3!+5!……+n!

帮我讲解一下这个代码,我算了很多次算不出正确答案,急需!f的值不知道该等于多少,很需要

img

这个函数定义了几个变量
s 存储最终的和 1!+3! +....n!
f 用存储单次的阶乘之和 如 1!

首先获取用户给的 n 最终值
外循环用于 步进 从 1 到 n , 每次 跳过一个数,例 从 1 到 3 跳过 2
内循环用于步进计算当前数值 i 的阶乘 从 1 乘到i , 比如i = 5, 5! 为 1x2x3x4x5 ,f = 1 , f= fx2, f=fx3...

因为阶乘是很大的,所以Int是不够用的,得用long long:

#include <stdio.h>
using namespace std;
int main()
{
    int n;
    unsigned long long f,ans=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i+=2)
    {
        f=1;
        for(int j=2;j<=i;j++) f*=j;
        ans+=f;
    }
    printf("%lld",ans);
      return 0;
}

没懂你在问什么,没找着 !f,不知道你说的是不是f!。
而且这个没有答案,因为它本就是完整的代码。
如果你意思是问输出结果的话,那么我只能说你输入的值不同,结果就不同。
这个代码内层循环是阶乘,外层循环是使其为奇数。
所以就是为了计算奇数的阶乘和
比如输入5,计算的结果就是 127(1!+3!+5!=127)
输入8,结果就是5167(1!+3!+5!+7!= 5167)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7434610
  • 这篇博客你也可以参考下:递归求阶乘和。实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+...+n! 的值。
  • 除此之外, 这篇博客: 递归法求1!+2!+3!+4!+……+n!中的 写在后面 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    这段代码的作用是计算求解1!+3!+5!+...+n!的结果。

    首先,让我们逐步分析代码:

    1. 首先,声明了一个函数factorial,该函数用来计算一个数的阶乘。函数的参数为一个整数num,返回值为num的阶乘。
    2. factorial函数中,初始化一个变量fact为1,用来保存阶乘的结果。
    3. 使用while循环,条件是num > 0,即num大于0才进行循环。
    4. 在循环中,累乘factnum的值,并将结果保存在fact中。然后,通过每次减2的操作,将num的值逐渐递减。
    5. num为0或负数时,跳出循环,并返回fact的值。
    6. 接下来,main()函数中声明了一个整数变量n,用来保存用户输入的数值。
    7. 声明了一个整数变量i,作为循环的计数器。
    8. 声明了一个整数变量f,用来保存最终结果。
    9. 使用for循环,从1开始,每次增加2,循环条件是i <= n,即i小于或等于n时进行循环。
    10. 在循环体中,调用factorial函数,传入当前循环的值i,将返回的阶乘结果累加到f中。
    11. 循环结束后,通过printf函数输出最终的结果f
    12. 返回0,表示程序正常结束。

    根据给定的代码,我们需要在main()函数中填入一个整数值给变量n,然后程序会对满足条件的数依次进行阶乘计算,并将结果累加到变量f中,并最终输出f的值。

    将以上分析总结成如下的步骤:

    1. 声明一个整数变量n,并赋予用户输入的值。
    2. 声明一个整数变量i,作为循环计数器。
    3. 声明一个整数变量f,用来保存最终结果,并初始化为0。
    4. 使用for循环,从1开始,每次增加2,循环条件是i <= n
    5. 在循环体中,调用factorial函数,将当前循环的值i传入,并将返回的阶乘结果累加到变量f中。
    6. 循环结束后,通过printf函数输出结果f

    注:我无法为您提供具体的解决方案中填写的整数值,因为需要您根据具体的需求提供一个整数作为n的值。您可以根据自己的计算需求填写一个整数。

    代码段如下:

    #include <stdio.h>
    int factorial(int num) {
        int fact=1;
        while(num>0) {
            fact*=num;
            num-=2;
        }
        return fact;
    }
    int main() {
        int n = 10; // 请填入一个整数作为n的值
        int i;
        int f = 0;
        for(i=1;i<=n;i+=2) {
            f += factorial(i);
        }
        printf("%d", f);
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^