ottas @ 2021-11-12 15:36:21
我原来的
#include <stdio.h>
int main()
{int n=1,k;
double s=0;
scanf("%d",&k);
for(;;n++)
{
s+=1/n;
if(s>k)break;
}
printf("%d",n);
}
参照一些帖子里的方法改的
#include <stdio.h>
int main()
{int n=1,k;
double s=0.0;
scanf("%d",&k);
for(;;n++)
{
s+=1.0/n;
if(s>k*1.0)break;
}
printf("%d",n);
}
谢谢
by Loser_King @ 2021-11-12 15:41:25
1/n 是整除,当 n>1 的时候其值为 0,导致后面 s 的值不改变,不能退出循环,所以就 TLE 了
而 1.0/n 是实数除法,返回的是小于 1 的小数,使 s 增加超过 k,从而 break 不会超时
by Loser_King @ 2021-11-12 15:42:32
以后可以试试使用输出调试,比如循环中输出 s 就可以避免这个问题。
by ottas @ 2021-11-12 19:13:44
@Loser_King 懂了懂了,谢谢