杭电ACM 2054 A == B ?

来源:互联网 发布:js 扫描枪录入 编辑:程序博客网 时间:2024/04/29 19:04

http://acm.hdu.edu.cn/showproblem.php?pid=2054

这道题费了我好长时间!变态!

这道题目上没给具体的数值类型,所以要开一个很大的字符数组。

要注意下面几种情况:

1)前面的无效0去掉

2)小数点后面的无效0去掉

3)-0=0

4)可以去掉的话,最好去掉小数点,防止10==10.0这种情况发生

#include <iostream>#include <cstring>using namespace std;char a[100000],b[100000];void change(char* a,int *s,int *len){//change the chars to standar formint i=0;int j=(*len)-1;if(a[i]=='-') {(*s)++;i++;(*len)--;}while(a[i]=='0'&&i<j+1) {(*len)--;(*s)++;i++;}//去掉前面的0 for(int k=0;k<j+1;k++){if(a[k]=='.') {while(a[j]=='0'&&j>=0) {(*len)--;j--;}break;}}//去掉小数点之后,最后的无用0 if(a[j]=='.')(*len)--; //去掉小数点 }int main(){int flag;int s_a,s_b;int len_a,len_b;int flag_po;//如果正负不同,=1 while(cin>>a>>b){flag_po=0;flag=1;s_a=0;s_b=0;len_a=strlen(a);len_b=strlen(b);if((a[0]=='-'&&b[0]!='-')||(a[0]!='-'&&b[0]=='-')) {flag_po=1; }change(a,&s_a,&len_a);change(b,&s_b,&len_b);if(len_a!=len_b) {cout<<"NO"<<endl;continue;}if(flag_po==1&&len_a==0){  //0=-0cout<<"YES"<<endl;continue;}if (flag_po==1){ cout<<"NO"<<endl;continue;}for(int i=s_a,j=s_b;i<len_a;i++,j++){if(a[i]!=b[j])  { cout<<"NO"<<endl; flag=0; break;}}if(flag==1) cout<<"YES"<<endl; }return 0;}


原创粉丝点击