为什么会这样呢,应该怎么改

img

img


#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int i,s;
    s=1;
    int n=1;
    while(1)
    {
        if(s>a)
        break;
        else
        {
            s=s+1/(s+1);
            n++;
        }
    }
    printf("%d",n);
    return 0;
}

这个整形除以整形还是整形,应当用双精度除以整形的双精度
还有你break那里的缩进很诡异啊
而且顺序也有问题

 
#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int i,s;
    s=1;
    int n=1;
    while(1){
        s=s+(1.0/(s+1));
        if(s>a) break;
        n++;
    }
    printf("%d",n);
    return 0;
}

1/(s+1)得到的结果会是整数,也就是0,如果想要得到小数,应该是1.0/(double)(s+1),这样才会是小数
而且,代码的逻辑也不是很对,应该是

s += 1.0 / n;
if (s > k) break;
n++;

修改如下,供参考:

#include <stdio.h>
int main()
{
    double s = 0;
    int n=1, k;
    scanf("%d", &k);
    while (1)
    {
        s += 1.0 / n;
        if (s > k) break;
        n++;
    }
    printf("%d", n);
    return 0;
}