A-B Problem
- 描述
-
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
#include <iostream>
#include <cstdlib>
using namespace std;int delete_Start_Zero(const string s,const int i)//去除前置0
{
int index=i;
while(index<s.length()&&s[index]=='0')
++index;
if(index==s.length()||s[index]=='.')//保留小数点前面的一个0
--index;
return index;
}int delete_End_Zero(const string s,const int i)//去除后置0
{
int j=i-1;
for(;j>=0;--j)
if(s[j]!='0')
break;
if(s[j]=='.')//保留小数点后的一个0
return j+1;
else
return j;
}bool substraction(const string s1,const string s2)
{
int start_1=delete_Start_Zero(s1,1);//s1有效数字的起始位置
int end_1=delete_End_Zero(s1,s1.length());//s1有效数字的结束位置
int start_2=delete_Start_Zero(s2,1);//s2有效数字的起始位置
int end_2=delete_End_Zero(s2,s2.length());//s2有效数字的结束位置if((s1[0]=='+'&&s2[0]=='-')||(s1[0]=='-'&&s2[0]=='+'))//符号相反只有都是0结果才可能为0
if(s1.substr(1,3)=="0.0"&&s2.substr(1,3)=="0.0")
return true;
else
return false;
else if((s1[0]=='+'&&s2[0]=='+')||(s1[0]=='-'&&s2[0]=='-'))//符号相同数字一样才为0
if(s1.substr(start_1,end_1-start_1+1)==s2.substr(start_2,end_2-start_2+1))
return true;
else
return false;
}int main()
{
string s1,s2;
while(cin>>s1>>s2)
{
if(isdigit(s1[0]))//如果第一位没有符号且是数字,则为正数
s1="+"+s1;
if(isdigit(s2[0]))
s2="+"+s2;
if(s1.find('.')==-1)//把正数也当做小数来处理,
s1.append(".0");
if(s2.find('.')==-1)
s2.append(".0");
if(substraction(s1,s2))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}