这题不难,没有涉及算法。主要是熟练了一下指针。主要思想就是,设定一个规范模式,然后朝着这个规范模式化解,代码可以优化,有许多冗余 的地方。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=1000000; char sa[maxn],sb[maxn]; int main() { while(scanf("%s %s",sa,sb)!=EOF) { getchar(); int len1=strlen(sa),len2=strlen(sb); char * a=sa; char * b=sb; char * ta=a+len1-1; char * tb=b+len2-1; if(a[0]=='-'||b[0]=='-') { if(a[0]!=b[0]) { cout<<"NO"<<endl; continue; } else { a++; b++; } } while(*a=='0') a++; while(*b=='0') b++; if(*a=='.'||*a=='\0') { a--; *a='0'; } if(*b=='.'||*b=='\0') { b--; *b='0'; } char * aa=a; char * bb=b; int flag1=0,flag2=0; while(*aa!='\0') { if(*aa=='.') { flag1=1; break; } aa++; } while(*bb!='\0') { if(*bb=='.') { flag2=1; break; } bb++; } if(flag1) { while(*ta=='0'&&*ta!='.') ta--; if(*ta=='.') *ta='\0'; else *(ta+1)='\0'; } if(flag2) { while(*tb=='0'&&*tb!='.') tb--; if(*tb=='.') *tb='\0'; else *(tb+1)='\0'; } if(strcmp(a,b)==0) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }