gpt4 book ai didi

c++ - 我如何计算 (2i+1) 的总和!使用 while 循环?

转载 作者:行者123 更新时间:2023-11-28 02:37:51 25 4
gpt4 key购买 nike

我现在正在visual studio中编写控制台程序。
我的程序应该计算以下系列的总和:

1!+3!+5!+...+(2N+1)!,  

其中 N 是大于 0 的整数(用户应先输入 N)。

不幸的是,我只能计算 1!+2!+3!+...(N)! 的总和

/* Calculates sum of 1!+2!+3!+...+(N)! */

#include <iostream>
using namespace std;

int main()
{

int i=1, n, fact = 1, sum = 0;

cout<<"Enter n";
cin >> n;

while(i <= n)
{
fact = fact * i;
i++;
sum = sum + fact;
}

cout<<"Sum is "<<sum<<"\n";
return 0;
}

那么我该如何让我的程序计算总和

1!+3!+5!+...+(2N+1)!

最佳答案

就这么简单

while(i <= 2*n+1)
{
fact = fact * i;
if (i%2)
sum = sum + fact;
i++;
}

您希望让循环每次都迭代,以便您的乘法包括偶数和奇数(否则第二项将是 3*1,而不是 3*2*1);但只有当您看到一个奇数时,您才想将其加到总数中。

另一种方法是只在奇数上循环,但每次都乘以当前数及其前导数:

while(i <= 2*n+1)
{
fact = fact * i * (i>1 ? i-1 : 1);
sum = sum + fact;
i+=2;
}

这有点复杂。您现在正在循环奇数(因为 i+=2,所以您需要在每个阶段乘以 ii-1。但是第一步要小心:当 i==1 时,你不想乘以 0!所以我们需要一个三元表达式来确保这不是'不会发生。

或者我们可以从i=3开始:

int i=3, sum=1, fact=1;
while(i <= 2*n+1)
{
fact = fact * i * (i-1);
sum = sum + fact;
i+=2;
}

这现在按预期工作,但我们需要将 sum 初始化为 1 因为循环现在错过了 i==1 的情况>。也许这样更干净。

但是请注意,在遇到 int 溢出之前,您不会走得太远!使用 long long 会更进一步,但即便如此,阶乘还是很大的,当您点击 n==10< 时,您会想要使用任意大小的整数类 左右(10 是估计值——我没有计算过)。

关于c++ - 我如何计算 (2i+1) 的总和!使用 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26927023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com