题目地址
这道题是大数比较的题,第一次做的时候,傻乎乎的直接比较是不是相等,当然WA,然后第二次有了字符串的概念,用了字符串来做,想了很多种情况,如果输入的数不是同一进制的怎么办,发现如果这样想这道题没法做了,就当成了相同进制,通过字符串来比较。
因为要字符串判断,所以要判断有没有无谓的东西使得两个相等的数不一样,例如000.001000和0.001这两个数是相等的,可是字符串却会判断不相等。
两个相等的数加上什么还是相等的呢(对于字符串而言),就是加上前导0和后导0,懂了这个有个大概了
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
using namespace std;
void Solve(string &n) {
if(n.find('.') != string::npos) {
int tem = n.size() - 1;
//cout << tem << endl;
int len = n.size();
//cout << len << endl;
for(int i = tem; n[i] == '0'; i--) {
len--;
}
if(n[len - 1] == '.') {
len--;
}
n = n.substr(0, len);
//cout << n << endl;
}
//处理前导0,看一些博客,测试数据并没有前导0,也没有符号数,就是说不会出现-0.0,+0.0这些奇葩的数
if(n[0] == '0' && n[1] != '.') {
int sub = 1;
while(n[sub] == '0' && n[sub + 1] != '.') {
sub++;
}
int len = n.size();
n = n.substr(sub, len - sub);
}
}
int main(void) {
string n1, n2;
while(cin >> n1 >> n2) {
Solve(n1);
Solve(n2);
//cout << n1 << endl;
if(n1 == n2) {
printf("YES\n");
}
else {
printf("NO\n");
}
}
return 0;
}