方法一:
#include <stdio.h>
int fact(int n)
{
if (n == 1 || n == 0)
return 1;
else
return (n * fact(n - 1));
}
int main()
{
int n, i;
double e = 0;
scanf("%d", &n);
for (i = 0; i <= n; i++)
e += 1.0 / fact(i);
printf("%.8lf", e);
return 0;
}
运行结果如下:
由于阶乘结果巨大,使得数据溢出,故阶乘函数的int换为double,代码如下:
#include <stdio.h>
double fact(int n)
{
if (n == 1 || n == 0)
return 1;
else
return (n * fact(n - 1));
}
int main()
{
int n, i;
double e = 0;
scanf("%d", &n);
for (i = 0; i <= n; i++)
e += 1.0 / fact(i);
printf("%.8lf", e);
return 0;
}
方法二:
使用双重循环:
#include <stdio.h>
int main()
{
int n, i, j;
double e = 1, item; //item是1000的阶乘那么大,一定要用double来存。
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
item = 1;
for (j = 1; j <= i; j++)
item = item * j;
e += 1.0 / item;
}
printf("%.8lf\n", e);
return 0;
}