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

时间:2014-11-14 09:44:58

标签: c++ visual-studio loops while-loop

我现在正在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)!

1 个答案:

答案 0 :(得分:2)

它就像

一样简单
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是一个估计 - 我还没有计算出来。)