A == B ?
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 55882 Accepted Submission(s): 8562
Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
Input
each test case contains two numbers A and B.
Output
for each case, if A is equal to B, you should print "YES", or print "NO".
Sample Input
1 2 2 2 3 3 4 3
Sample Output
NO YES YES NO
//只能说水过... 数据在hdu---discuss版面有人贴出,这里不再给,版面中数据过了基本就能过了。
代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #define N 15001 char f1[N],f2[N]; //判断AB是否相等,这里AB是字符串,需要预处理字符串为标准形式。 int main() { freopen("in.txt","r",stdin); int i,j,k,T,n,m;int len; while(scanf("%s %s",f1,f2)!=EOF){ //这里分情况吧,为0的比较特殊,单独判断。 int a1=0,a2=0;int len1=strlen(f1),len2=strlen(f2); for(i=0;i<len1;i++) if(f1[i]=='.' || f1[i]=='0' || f1[i]=='+' || f1[i]=='-') continue; else{a1=1;break;} for(i=0;i<len2;i++) if(f2[i]=='.' || f2[i]=='0' || f2[i]=='+' || f2[i]=='-') continue; else{a2=1;break;} if(a1==0 || a2==0){ //有一个为0的情况! if(a1==a2 && a1==0) printf("YES\n"); else printf("NO\n"); } else{ //数字都不为0;----先进性预处理; int flag=1; if(f1[0]=='-' || f2[0]=='-'){ //两数存在负数; if((f1[0]=='-' && f2[0]!='-') || (f1[0]!='-' && f2[0]=='-')) { flag=0;printf("NO\n"); } else{ //处理‘-’号;之后当做正数处理; if(f1[0]=='-'){ for(i=1;i<len1;i++) f1[i-1]=f1[i]; len1--; f1[len1]='\0'; } if(f2[0]=='-'){ for(i=0;i<len2;i++) f2[i-1]=f2[i]; len2--;f2[len2]='\0'; } } } if(flag){ if(f1[0]=='+'){ for(i=1;i<len1;i++) f1[i-1]=f1[i]; len1--; f1[len1]='\0'; } if(f2[0]=='+'){ for(i=0;i<len2;i++) f2[i-1]=f2[i]; len2--;f2[len2]='\0'; } if(f1[0]=='.'){ for(i=len1;i>0;i--) f1[i]=f1[i-1]; len1++; f1[0]='0'; } if(f2[0]=='.'){ for(i=len2;i>0;i--) f2[i]=f2[i-1]; len2++; f2[0]='0'; } //处理两个正数!---分为是否存在小数点两种情况; int t,t1,t2;//标志小数点存在与否; t=t1=t2=0;m=-1; for(i=0;i<len1;i++) if(f1[i]=='.'){ t=1;m=i;break;}//存在小数点; if(m!=-1){ for(i=len1-1;i>m;i--) if(f1[i]=='0'){ len1--;f1[len1]='\0'; } else break; if(f1[len1-1]=='.'){len1--; f1[len1]='\0';} } //上面处理了后导0; //if(f1[m]=='.') ; //else m=len1-1; for(i=0;i<len1;i++) if(f1[i]=='0') continue; else{ t2=i;break; } if(t2==m) t2--;//前面都是0; for(i=t2;i<=len1;i++) f1[i-t2]=f1[i]; len1=len1-t2; //字符串1处理完毕! t=t1=t2=0;m=-1; for(i=0;i<len2;i++) if(f2[i]=='.'){ t=1;m=i;break;}//存在小数点; if(m!=-1){ for(i=len2-1;i>m;i--) if(f2[i]=='0'){ len2--;f2[len2]='\0'; } else break; if(f2[len2-1]=='.'){len2--; f2[len2]='\0';} } //上面处理了后导0; //if(f2[m]=='.'); //else m=len2-1; for(i=0;i<len2;i++) if(f2[i]=='0') continue; else{ t2=i;break; } if(t2==m) t2--;//前面都是0; for(i=t2;i<=len2;i++) f2[i-t2]=f2[i]; len2=len2-t2; t=1; if(len1!=len2) t=0; else{ for(i=0;i<len1;i++) if(f1[i]!=f2[i]){ t=0;break; } } if(t) printf("YES\n"); else printf("NO\n"); } } } return 0; }