【坑】HDU2054 A==B?

来源:互联网 发布:linux 壁纸 编辑:程序博客网 时间:2024/05/22 09:00

链接:点击打开链接

非常坑的一道题,看上去水到暴。。顺手用__int64,wa了,然后才发现没这么简单。

1、统一正负号

2、去掉先导零

3、去掉小数点后末尾的0

3、各种用0表示的坑 +0 -0 +0.00 -0.000都是yes...

不要小看水题。。ORZ

#include <iostream>#include <string>#include <cstdio>#include <ctype.h>using namespace std;int main(){string a,b;string blank="";while(cin>>a>>b){bool a0=1,b0=1;//0单独判断之,防止0.00 -0 +0.000 +00.000.......等很多种 for(int i=0;i<a.length();i++){if(a[i]!='0' && a[i]!='.' && a[i]!='+' && a[i]!='-'){a0=0;break;}} for(int i=0;i<b.length();i++){if(b[i]!='0'&&b[i]!='.'&&b[i]!='+'&&b[i]!='-'){b0=0;break;}}if(a0==1 && b0==1){cout<<"YES"<<endl;break;}//1-防止+0 0这种 if(isdigit(a[0]))a.insert(0,"+");if(isdigit(b[0]))b.insert(0,"+");int posa=a.length()-1;int posb=b.length()-1;int befzeroa=0,befzerob=0;for(int j=1;j<posa;j++){if(a[j]=='0')continue;else{befzeroa=j-1;break;}}for(int j=1;j<posb;j++){if(b[j]=='0')continue;else{befzerob=j-1;break;}}//2-防止009.7  9.7这种 a.erase(1,befzeroa); //正确的删除用法 b.erase(1,befzerob);int lastzeroa=a.length();int lastzerob=b.length();for(int i=1;i<a.length();i++){if(a[i]=='.')posa=i;}for(int j=1;j<b.length();j++){if(b[j]=='.')posb=j;}for(int p=a.length()-1;p>posa;p--){if(a[p]=='0'){a.erase(p,1);}else{break;}}for(int t=b.length()-1;t>posb;t--){if(b[t]=='0'){b.erase(t,1);}else{break;}}//3-防止3.0 --- 3 这种 if(a[a.length()-1]=='.')a.erase(a.length()-1,1);if(b[b.length()-1]=='.')b.erase(b.length()-1,1);//cout<<a<<" "<<b<<endl;if(a==b)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;}


原创粉丝点击