变态的ACM题
Sep 19, 2012 08:10:33 PM
http://acm.nyist.net/JudgeOnline/problem.php?pid=477
链接地址是南阳理工学院的一道语言入门题,我在作出如下判断后进行提交
if(c == (a + b)){ printf("Yes\n"); } else{ printf("No\n"); }
结果是错误的。
此题关键是实数在计算机内存储形式问题,如:1在计算机内部形式是0.99999·····
所以会产生小数点后精度的一点点偏差,导致程序出错!
正确的结果是:
#include <stdio.h> int main(){ int num = 0; double a = 0, b = 0, c = 0; scanf("%d", &num); while(num--){ scanf("%lf %lf %lf", &a, &b, &c); if((a <= 10000.0) && (a >= -10000.0) && (b <= 10000.0) && (b >= -10000.0) && (c <= 20000.0) && (c >= -20000.0)) { if(((a + b) - c <= 0.00001) && ((a + b) - c >= -0.00001)){ printf("Yes\n"); } else{ printf("No\n"); } } } return 0; }