#include
#include
int main()
{
double e;
long k=1;
int n,i;
while(scanf("%d",&n)!=EOF)
{
e=1;
for(i=1;i1.0/k;
}
printf("%.4f\n",e);
}
return 0;
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
你的代码中,k 的初值被初始化为 1,在 for 循环中,i 的初值为 1,因此 k 的值在第一次循环时被更新为 k=k*1=1,这就导致在计算 1.0/k 时出现了除以 0 的错误。
为了避免这个问题,你可以将 k 的初值设置为 1,将 for 循环的初值从 1 改为 2。
下面是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double e;
long k;
int n, i;
while (scanf("%d", &n) != EOF) {
e = 1;
k = 1;
for (i = 2; i <= n; i++) {
k = k * i;
e = e + 1.0 / k;
}
printf("%.4f\n", e);
}
return 0;
}
注意,k 的数据类型应该是 long,而不是 int,因为阶乘的结果可能会很大。