POJ 1003

 1 #include <stdio.h>
2 #define E 0.001
3
4 int main()
5 {
6 double t;
7 while( scanf("%lf", &t) && t <=-E || t >= E )
8 {
9 double sum =0, i;
10 for(i =2; ; i++)
11 {
12 sum +=1/i;
13 if( sum - t > E)
14 break;
15 }
16 printf("%d card(s)\n", (int)(i-1) );
17 }
18 return0;
19 }

不折不扣的水题,不过仍旧反映了一些值得注意的问题。那就是关于浮点数比较大小的事项。

在林锐《高质量c/c++编程》中有较为深入的分析。比较两个浮点数的时候,我们必须设定好精度范围。

一般情况下,设我们要求的精度为E,那么则有

if( abs(x - y) <= E )  //x == y
if( abs(x - y) > E ) //x != y
if( x - y >= E ) //x > y
if( x - y <-E ) //x < y

所以平常写程序应该注意这点。

原文地址:https://www.cnblogs.com/ShaneZhang/p/2106762.html