今天碰到一道带坑的题意思是判定两个数是否相等,我想都没想直接if语句判定了,结果。。。。。。
我错了
题目如下
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
看着案例提示你是不是觉得很简单?哈哈,我也觉得,但坑还是要挖出来的,
- numbers 的范围没给你,在这里不能光来个int完事,(示例坑人,他给的都是整数,就是坏心眼来误导你)
- 还是numbers的问题,数字比较不一定是同类型的比如(1.0, 1)这两个数是相等的
思路:因为数据类型的不同,所以我们考虑同一用字符数组来存数据,然后(1.0000000, 1)两个数比较话我们要先简化一下,将一些无意义的0去掉(1.0000000去除多余的0后,小数点无意义,也去掉),处理后直接strcmp(num1, num2)比较俩个字符串(注意去除无效的0是从数字末尾开始的)
代码如下:
#include <stdio.h>
#include <string.h>
char num1[1000];
char num2[1000];
void change0(int a, char num[1000]);
int main() {
while (scanf("%s %s", num1, num2) != EOF)
{
for (int i = 0; num1[i] != '\0'; i++)
{
if (num1[i] == '.')
{
change0(strlen(num1)-1, num1);
}
}
for (int k = 0; num2[k] != '\0'; k++)
{
if (num2[k] == '.')
{
change0(strlen(num2)-1, num2);
}
}
getchar();
if(strcmp(num1, num2))
{
printf("NO\n");
} else
{
printf("YES\n");
}
}
return 0;
}
void change0(int a, char num[1000]) {
for (int j = a; num[j] == '0'; j--)
{
if (num[j-1] != '0')
{
if (num[j-1] == '.')
{
num[j-1] = '\0';
} else
{
num[j] = '\0';
}
break;
}
}
}