U - A == B ?
题目描述
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
思路:
此题需要考虑的情况较多:
小数,整数,末尾多余的0
代码
#include <stdio.h>
#include <string.h>
int cmp(char *a,char *b)
{
int lena,lenb;
int flaga,flagb,flag,pointa,pointb;
int i;
flaga=flagb=flag=0;
pointa=pointb=0;
lena=strlen(a);
lenb=strlen(b);
//判断是否为小数,如果是记下小数点的位置
for(i=0; i<lena; i++)
if(a[i]=='.')
{
flaga=1;
pointa=i;
}
for(i=0; i<lenb; i++)
if(b[i]=='.')
{
flagb=1;
pointb=i;
}
if(!(flaga|flagb))
{
flag=!strcmp(a,b);//都为整数
}
else if(flaga^flagb)
{
flag=1;
if(lena>=lenb)
{
if(strncmp(a,b,lenb))
flag=0;
else for(i=pointa+1; i<lena; i++)
if(a[i]!='0')
flag=0;
}
if(lena<=lenb)
{
if(strncmp(a,b,lena))
flag=0;
else for(i=pointb+1; i<lenb; i++)
if(b[i]!='0')
flag=0;
}
}
else //都是小数
{
flag=1;
if(lena==lenb)
flag=!strcmp(a,b);
else if(lena>lenb)
{
if(strncmp(a,b,lenb))//比较前lenb个字符
flag=0; //不等
else //比较剩下的字符
{
for(i=lenb; i<lena; i++)
if(a[i]!='0')
flag=0;
}
}
else if(lenb>lena)
{
if(strncmp(a,b,lena))//比较前lenb个字符
flag=0; //不等
else //比较剩下的字符
{
for(i=lena; i<lenb; i++)
if(b[i]!='0')
flag=0;
}
}
}
return flag;
}
int main()
{
char a[20000],b[20000];
while(scanf("%s%s",a,b)!=EOF)
{
if(cmp(a,b))
printf("YES\n");
else printf("NO\n");
getchar();
}
return 0;
}