提示:这道题看起来简单,但只用简单的if不能AC,因为必须要考虑小数点;考虑用字符串来进行比较
一、问题描述
Give you two numbers A and B, if A is equal to B, you should print “YES”, or print “NO”.
二、输入
each test case contains two numbers A and B.
三、输出
for each case, if A is equal to B, you should print “YES”, or print “NO”.
四、代码
首先需要定义一个函数,用于消除小数点后多余的"0",比如"5.0"转化为"5".
之后在main函数中引用函数之后,在进行strcmp(a,b)的比较.
#include <iostream>
using namespace std;
char a[100017], b[100017];
void f(char s[]) {
int len = strlen(s);
int i, p;
p = 0;
for (i = 0; i < len; i++) {
if (s[i] == '.') {
p = 1;
break;
}
}
if (p) {
for (i = len - 1; i >= 0; i--) {
if (s[i] == '0') {
s[i] = '\0';
}
else break;
len--;
}
}
if (s[len - 1] == '.') s[len - 1] = '\0';
}
int main() {
while (cin >> a >> b) {
f(a);
f(b);
if (strcmp(a,b)==0) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
易错点
代码如下(示例):
这里可能会有同学有疑问,为什么不能用for循环进行比较?以下展示用for 循环进行比较的情况,如下所示
int main() {
char A[50], B[50];
int len1, len2, p, i;
while (cin >> A >> B) {
p = 1;
f(A);
f(B);
len1 = strlen(A);
len2 = strlen(B);
if (len1 != len2) {
cout << "NO" << endl;
p = 0;//长度不同,肯定不等
}
else {
for (i = 0; i < len1; i++)
if (A[i] != B[i])
p = 0;//不相等
}
if (p == 0) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}
因为用for会引起超时,因此需要借助strcmp(a,b)函数来进行比较.
总结
超时的时候可以利用语言中的函数strcmp(a,b)进行比较,以此减少时间上的花销.