冬天的海獭 @ 2018-03-28 10:19:25
int main() { int K,N; float Sn,x; scanf("%d",&K); Sn=0; x=1; N=0; while(Sn<=K){ Sn=Sn+x; N++; x=1/N; } printf("%d\n",N); return 0; }
by Ervin @ 2018-03-28 10:57:00
#include <stdio.h>
int main()
{
int K,N;
float Sn,x;
scanf("%d",&K);
Sn=0;
x=1;
N=1;
while(Sn<=K)
{
N++;
x=1.0/N;
Sn=Sn+x;
}
printf("%d\n",N);
return 0;
}
首先x和N初始不应该是1和0,否则Sn就加了两个1,不过可以都是1,或者都是0,
其次while中求x的时候,必须加上一个".0"不然求出来的就会是后边的式子向下取整,所以x一直都是零,然后就跑不出来了,
我上边给你改了改你的程序,你看看对不对,如果还有问题尽管问我
by 冬天的海獭 @ 2018-03-28 16:52:33
@Ervin 哦谢谢,我明白那个1.0的问题了。 赋初值的问题的话,while循环里我的语句顺序和你是不一样的,所以也没有问题了,不过你的更清楚不容易出错。 但是。。。我按你的改过之后还是0分呀。。。
by Ervin @ 2018-03-28 16:55:51
啊。。。这就尴尬了,我再看一下啊@冬天的海獭
by Ervin @ 2018-03-28 17:01:21
哇咔咔,我发现了哎,,,我改的时候刚开始测试没有问题,结果后来把while的顺序换了一下,N没有改成0,改成0就对了!!!
#include <stdio.h>
int main()
{
int K,N;
float Sn,x;
scanf("%d",&K);
Sn=0;
x=1;
N=1;
while(Sn<=K)
{
N++;
x=1.0/N;
Sn=Sn+x;
}
printf("%d\n",N);
return 0;
}
@冬天的海獭
by Ervin @ 2018-03-28 17:02:56
咳咳咳,再发一遍哈
#include <stdio.h>
int main()
{
int K,N;
double Sn,x;
scanf("%d",&K);
Sn=0;
x=1;
N=0;
while(Sn<=K)
{
N++;
x=1.0/N;
Sn=Sn+x;
}
printf("%d\n",N);
return 0;
}
突然又发现一处,这道题可能double比较好一点,有可能会有误差吧,反正我用的double,你可以用float试试,这样就对了,我刚才测试了。。
by 冬天的海獭 @ 2018-04-01 09:50:48
by 冬天的海獭 @ 2018-04-01 09:51:26
@Ervin 对了我自己测试的时候用float到15的时候程序就不能运行了,可能这也是一个错误的地方,谢谢了
by Ervin @ 2018-04-01 09:56:50
@冬天的海獭 没事没事,不用谢,最好用double一般不用float,^_^