如何计算意甲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;
}
最佳答案
您在这里有一个整数除法:
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;
}
如评论中所述,您无需在每个步骤都重新计算阶乘。