系列收敛到C ++中的数字e

时间:2012-01-23 02:55:01

标签: c++ algorithm

如何计算系列1 + 1/1! + 1/2! + 1/3! + ... + 1 / N!在C ++中? 我有一个大纲:

#include <iostream>
using namespace std;
int main()
{
    int n, i, j, fat;
    float soma = 0.0;
    cin >> n;
    for (i = 1; i <= n; i++)
    {

        fat = 1;
        soma += 1 / fat;
        for (j = 1; j <= n; j++)
        {
            fat *= j;
        }
    }
    cout << soma << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:5)

保留一个正在运行的术语并将其添加到结果中:

double result = 1.0;
double term = 1.0;

for (unsigned int i = 1; i != N; ++i)
{
    term /= i;
    result += term;
}

return result;

您只需稍加修改即可计算任何exp(x)

答案 1 :(得分:3)

你在这里有一个整数除法:

soma += 1 / fat;

将其更改为:

soma += 1. / fat;

另请注意,当n变大时,您的实现很容易受到整数溢出的影响。

这是工作版本。还有2个错误:

int main()
{
    int n, i, j, fat;
    float soma = 1.0;   //  Change to 1.0
    cin >> n;
    for (i = 1; i <= n; i++)
    {

        fat = 1;
        for (j = 1; j <= i; j++)
        {
            fat *= j;
        }
        soma += 1. / fat;      //  Move this to after the loop.
    }
    cout << soma << endl;
    return 0;
}

如评论中所述,您无需在每一步重新计算阶乘。