如何计算序列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;
}发布于 2012-01-23 10:56:28
这里有一个整数除法:
soma += 1 / fat;将其更改为:
soma += 1. / fat;还要注意,当n变大时,您的实现非常容易受到整数溢出的攻击。
以下是工作版本。还有两个错误:
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;
}正如评论中提到的,您不需要在每一步都重新计算阶乘。
发布于 2012-01-23 11:04:55
保留一个正在运行的术语并将其添加到结果中:
double result = 1.0;
double term = 1.0;
for (unsigned int i = 1; i != N; ++i)
{
term /= i;
result += term;
}
return result;只需稍加修改,就可以计算出任何exp(x)。
https://stackoverflow.com/questions/8966747
复制相似问题