HDUOJ入坑第5天-------A == B ?(题2054)

今天碰到一道带坑的题意思是判定两个数是否相等,我想都没想直接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

看着案例提示你是不是觉得很简单?哈哈,我也觉得,但坑还是要挖出来的,

  1. numbers 的范围没给你,在这里不能光来个int完事,(示例坑人,他给的都是整数,就是坏心眼来误导你)
  2. 还是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;
		}
	}
}
发布了33 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/LioTomcat/article/details/105101346