A == B ?
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 61332 Accepted Submission(s): 9578
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
题意:
比较两个数是否相等;
思路:要去掉前导零,小数点后面的后缀零等;
下面的代码再详细注释说明:
#include<cstdio>
#include<cstring>
char str1[20000],str2[20000];
int main()
{
int i,j,flag,len1,len2,n;
while(scanf("%s%s",str1,str2)!=EOF)
{
getchar();
flag=0;
len1=strlen(str1);
len2=strlen(str2);
if(str1[0]=='-'&&str2[0]!='-'||str2[0]=='-'&&str1[0]!='-')//先判断符号
printf("NO\n");
else
{
if(str1[0]=='-'&&str2[0]=='-')
{
strcpy(str1,&str1[1]);//拷 贝 函 数,将 str1 从第二个元素开始拷贝;
strcpy(str2,&str2[1]);
len1--;
len2--;
}
for(i=0;i<len1;i++)//处理前面多余的 0;
{
if(str1[i]!='0')
break;
}
strcpy(str1,&str1[i]);
len1=strlen(str1);
for(i=0;i<len1;i++)//判断是否有小数点;
if(str1[i]=='.')
{
flag=1;
break;
}
n=len1;
for(i=n-1;i>=0;i--)
{
if(flag==1&&str1[i]=='0')//去掉后面多余的 0 ;
--len1;
else
break;
}
for(i=0;i<len2;i++)//同上诉方法,处理第二个,处理前面多余的 0;
{
if(str2[i]!='0')
break;
}
strcpy(str2,&str2[i]);
len2=strlen(str2);
flag=0;
for(i=0;i<len2;i++)//判断是否有小数点;
if(str2[i]=='.')
{
flag=1;
break;
}
n=len2;
for(i=n-1;i>=0;i--) //去掉后面多余的 0 ;
{
if(flag==1&&str2[i]=='0')
len2--;
else
break;
}
str1[len1]='\0';
str2[len2]='\0';
if(str1[len1-1]=='.')//如果最后一位是小数点,也去掉;
{
str1[len1-1]='\0';
}
if(str2[len2-1]=='.')//如果最后一位是小数点,也去掉;
{
str2[len2-1]='\0';
}
if(strcmp(str1,str2))//处理好之后,比较;
printf("NO\n") ;
else
printf("YES\n");
}
}
return 0;
}