1 #include2 #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
所以平常写程序应该注意这点。