在不考虑正数前加‘+’的情况下,也能ac。。。不过考虑上更全面。。。
#include<stdio.h> #include<stdlib.h> #include<string.h> char a[100000],b[100000],c[100000],d[100000]; void deal(char *s,int k,int len) { int i,j; for(i=0;i<len-k;i++) s[i]=s[i+k]; for(i=len-k;i<len;i++) s[i]=0; len-=k; if(strchr(s,'.')){ //存在小数点 for(i=len-1;i>=0;i--){ if(s[i]=='0') s[i]=0; else break; } if(s[i]=='.') s[i]=0; } } int main() { int i,j,len1,len2,flag,k1,k2; while(scanf("%s %s",a,b)!=EOF){ len1=strlen(a); len2=strlen(b); flag=1; //既要考虑正负,还要考虑前导0,还要考虑小数 for(i=0;i<len1;i++) if(a[i]>'0'&&a[i]<='9') break; k1=i; for(i=0;i<len2;i++) if(b[i]>'0'&&b[i]<='9') break; k2=i; strcpy(c,a); strcpy(d,b); deal(c,k1,len1); deal(d,k2,len2); if(strcmp(c,d)==0) flag=1; //在不考虑符号的情况下相等 else flag=0; // printf("%s %s\n%d %d %d\n",c,d,k1,k2,flag); if(flag){ //判断正负号 if((k1==0&&k2>0&&b[k2-1]=='-')||(k1>0&&a[k1-1]=='-'&&k2==0)) flag=0; else if((k1&&k2&&a[k1-1]=='-'&&b[k2-1]!='-')||(k1&&k2&&a[k1-1]!='-'&&b[k2-1]=='-')) flag=0; } if(flag) printf("YES\n"); else printf("NO\n"); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); } //system("pause"); return 0; }