题目如下:
给你两个数字A和B,如果A等于B,你应该打印“YES”,或打印“NO”。
Input
每个测试用例包含两个数字A和B.
Output
对于每种情况,如果A等于B,则应打印“是”,或打印“否”。
Sample Input
1 2 2 2 3 3 4 3Sample Output
NO YES YES NO
对于本题,在写代码的时候很容易写成直接比较两个数是否相等的代码,这就掉入了题中的大陷阱。因为题中只是说有两个数,但是并没有说这两个数是什么数,也有可能是小数,也有可能是负数。并且也没有给说出这一串数字的范围大小,那么就应该以数组的形式进行输入(字符数组),并且数组要开的适当大。
在字符数组内容中,有一个strcmp()函数,用于比较两个字符串的大小关系。
那么本题如果说使用了这个函数,就会简单很多,而如果要使用这个函数,就要排除像 100 0100这样的数不相等的情况,那么就要先判断是否有小数点,开头和结尾是否有‘0’,如果有‘0’的话就删除这个‘0’,最后进行一个比较久行了。
AC代码如下。
#include<string.h>
#include<stdio.h>
char a[1000001],b[1000001];
void num_maxx(char s[])
{
int num_xiaoshudian=0;
int l1=strlen(s);
for(int i=0;i<l1;++i)
{
if(s[i]=='.')
{
num_xiaoshudian=1;//代表一串数里面有小数点
break;
}
}
if(num_xiaoshudian==1)
{
for(int i=l1-1;i>=0;--i)
{
if(s[i]=='0')
{
s[i]='\0';
l1--;
}
else
break;
}
if(s[l1-1]=='.')
{
s[l1-1]='\0';
}
}
}
int main()
{
while(scanf("%s %s",a,b)!=EOF)
{
num_maxx(a);
num_maxx(b);
if(strcmp(a,b))
printf("NO\n");
else
printf("YES\n");
}
return 0;
}