首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中收敛到数字e的级数

在C++中收敛到数字e的级数
EN

Stack Overflow用户
提问于 2012-01-23 10:55:01
回答 2查看 1.4K关注 0票数 2

如何计算序列1+ 1/1!+ 1/2!+ 1/3!+...+1/n!在C++?我有一个提纲:

代码语言:javascript
运行
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-23 10:56:28

这里有一个整数除法:

代码语言:javascript
运行
复制
soma += 1 / fat;

将其更改为:

代码语言:javascript
运行
复制
soma += 1. / fat;

还要注意,当n变大时,您的实现非常容易受到整数溢出的攻击。

以下是工作版本。还有两个错误:

代码语言:javascript
运行
复制
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;
}

正如评论中提到的,您不需要在每一步都重新计算阶乘。

票数 3
EN

Stack Overflow用户

发布于 2012-01-23 11:04:55

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

代码语言:javascript
运行
复制
double result = 1.0;
double term = 1.0;

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

return result;

只需稍加修改,就可以计算出任何exp(x)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8966747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档