NYOJ_477A+B Problem III

来源:互联网 发布:网络ip计算器 编辑:程序博客网 时间:2024/05/18 00:58

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 011 -11.25 -0.251 2 +4
样例输出
YesYesNo
代码:
#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;elsecout<<"No"<<endl;}return 0;}
思路解析:
判断是否相等,数据的小数部分,不会超过四位。即允许误差在0.0001的范围内。。。
值得一提的INT_MIN的问题:
见代码:
#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;导致的结果不同。。。
好像知道编译器到底还做了什么事,继续关注。。。



1 0
原创粉丝点击