左叶7 5500 为什么1314行不能去掉在上边写k=1

img


这样写为什么错了

#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,因为阶乘的结果可能会很大。