A+B Problem III
描述
求A+B是否与C相等。
-
输入
-
T组测试数据。
每组数据中有三个实数A,B,C(-10000.0<=A,B<=10000.0,-20000.0<=C<=20000.0)
数据保证小数点后不超过4位。
输出
-
如果相等则输出Yes
不相等则输出No
样例输入
-
3 -11.1 +11.1 0 11 -11.25 -0.25 1 2 +4
样例输出
-
Yes Yes No
#include<stdio.h>
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--){
double a,b,c;
cin>>a>>b>>c;
if(fabs((c-(a+b))) < 0.0001)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
思路解析:
判断是否相等,数据的小数部分,不会超过四位。即允许误差在0.0001的范围内。。。
值得一提的INT_MIN的问题:
见代码:
i=-2147483648,j=2147483647, cmp1=1,cmp2=0
Press any key to continue
#include <stdio.h>
#include <limits.h>
int main(){
int i = INT_MIN;
int j = i-1;
int cmp1 = ((i-1)>0);
int cmp2 = (i>1);
printf("i=%d,j=%d, cmp1=%d,cmp2=%d\n",i, j, cmp1,cmp2);
return 0;
}
输出:
i=-2147483648,j=2147483647, cmp1=1,cmp2=0
Press any key to continue
观察两个不同:
第一:“i”和“j”,我们要求"j"等于"i-1";但是结果出乎意料,他们之间的差距比1大很多。。。
原因是有负溢出产生。负溢出是指当两个负数相加时,因为溢出,使得结果为正数或者是"0";
第二:“cmp1”和"cmp2",是因为编译器把(i-1)>0优化为i>1;导致的结果不同。。。
好像知道编译器到底还做了什么事,继续关注。。。