#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;
}