描述
A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。
现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢?
-
输入
-
有多组测试数据。每组数据包括两行,分别代表A和B。
它们的位数小于100,且每个数字前中可能包含+,- 号。
每个数字前面和后面都可能有多余的0。
每组测试数据后有一空行。
输出
-
对于每组数据,输出一行。
如果A-B=0,输出YES,否则输出NO。
样例输入
-
1 1 1.0 2.0
样例输出
-
YES
NO
-
判断相减是否为零,可以转换为比较字符串,相等时就为零 但是由于题目中前后都会有多余的零,因此要不把前导零和后导零去掉在进行比较
-
还有正负号,再去时也要考虑,一般正号要去点,负号必须留下,但是 00 -00 比较特殊 负号要去掉,否则就会出错
-
-
-
#include <iostream> #include <stdio.h> #include <string> using namespace std; int bj(string a, string b) { if(a[0]=='-'&&b[0]=='-') { for(int i=0; i<=a.size(); i++) { if(a[i]>b[i]) return 0; if(a[i]<b[i]) return 1; } return -1; } else if(a[0]=='-') return 0; else if(b[0]=='-') return 1; else { for(int i=0; i<=a.size(); i++) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return 0; } return -1; } } string ql(string s) // 去前后导零,以及正负号的保留,考虑要全面否则特例会错 { string ans; int ok=0,f=0,l=0; int pos1=0,pos2=s.size()-1; for(int i=0; i<s.size(); i++) { if(s[i]=='.') { ok=1; break; } } for(int i=0; i<s.size(); i++) { if(s[i]!='0'&&s[i]!='+'&&s[i]!='-') { pos1=i; f=1; break; } } if(ok==1) { for(int i=pos2; i>=0; i--) { if(s[i]!='0'&&s[i]!='.'&&s[i]!='-'&&s[i]!='+') { pos2=i; l=1; break; } } } if(pos1==0&&f==0) pos1=s.size()-1; if(l==0&&ok!=0) pos2=0; if(s[0]=='-'&&s[pos1]!='0'&&s[pos1]!='.') ans+='-'; for(int i=pos1; i<=pos2; i++) ans+=s[i]; if(ans.size()==0) ans="0"; return ans; } int main() { string a,b; int ans=-5; while(cin>>a>>b) { ans=-5; a=ql(a); b=ql(b); if(a.size()!=b.size()) { cout<<"NO"<<endl; } else { ans=bj(a,b); if(ans==-1) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } return 0; }