HDoj 2054 A == B ?
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
Author
8600 && xhd
Source
Recommend
典型大数问题,注意错误点
1 防止遇到1.10000
2 防止遇到1.0000
3 防止0.000数组越界
4 防止10.000 和10.000比较
还有一点C++中string的sizeof()测量字符串的长度,规则并不是以'\0'截止。在codeblocks的MinGW中是这样
C语言代码如下:
#include<stdio.h> #include<string.h> int main() { char s1[100000]; char s2[100000]; int flag1,flag2; while(scanf("%s%s",s1,s2)!=EOF) { flag1=flag2=0; for(int i=0;i<strlen(s1);i++) { if(s1[i]=='.') { flag1=1; break; } } for(int i=0;i<strlen(s2);i++) { if(s2[i]=='.') { flag2=1; break; } } if(flag1) { int i=strlen(s1)-1; while(i>0) //防止0.000的情况导致数组越界 { if(s1[i]>='1'&&s1[i]<='9') break; if(s1[i]=='0') //遇到1.1000 s1[i]='\0'; if(s1[i]=='.') //防止遇到1.0000 { s1[i]='\0'; break; ////这句要加上,因为小数点之前的0是有效的 } i--; } // for(int i=strlen(s1)-1;s1[i]=='0';i--) // s1[i]='\0'; } if(flag2) { int i=strlen(s2)-1; while(i>0) //防止0.000的情况导致数组越界 { if(s2[i]>='1'&&s2[i]<='9') break; if(s2[i]=='0') //遇到1.1000 s2[i]='\0'; if(s2[i]=='.') //防止遇到1.0000 { s2[i]='\0'; break; //这句要加上,因为小数点之前的0是有效的 } i--; } // for(int i=strlen(s2)-1;s2[i]=='0';i--) // s2[i]='\0'; } // printf("%s %s\n",s1,s2); // printf("%d %d\n",strlen(s1),strlen(s2)); if(!strcmp(s1,s2)) printf("YES\n"); else printf("NO\n"); getchar(); } }
浙公网安备 33010602011771号