超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2054
这道题坑特别多:
放几组数据:
// 均为YES
0.0 0.00
-0 0
-0. +.0
0.1 00.10
4 4
+1 1
-1 -1.0
1.0 1.0
+.020 00.02
代码如下(主要练习string的iterator):
#include <iostream>
#include <fstream>
using namespace std;
void Redirect(ios &src, const ios &des)
{
src.rdbuf(des.rdbuf());
}
int main()
{
#ifndef ONLINE_JUDGE
const ifstream inputFile("1.txt");
Redirect(cin, inputFile);
#endif
string a, b;
size_t aPos, bPos;
string::iterator bIter;
string::reverse_iterator eIter;
bool isPa, isPb;
bool isRa, isRb;
while (cin >> a >> b)
{
aPos = bPos = 0;
isRa = isRb = false;
if (a.find(".") != string::npos)
isRa = true;
if (b.find(".") != string::npos)
isRb = true;
if (a[0] == '.')
a.insert(0, "0");
if (b[0] == '.')
b.insert(0, "0");
bIter = a.begin();
if (a[0] == '+')
{
isPa = true;
bIter = a.erase(bIter);
}
else if (a[0] == '-')
{
isPa = false;
bIter = a.erase(bIter);
}
else
isPa = true;
while (*bIter == '0')
{
bIter = a.erase(bIter);
}
eIter = a.rbegin();
while (isRa && *eIter == '0')
{
string::iterator retIter = a.erase(--eIter.base());
eIter = string::reverse_iterator(retIter);
if (*eIter == '.')
{
a.erase(--eIter.base());
break;
}
}
bIter = b.begin();
if (b[0] == '+')
{
isPb = true;
bIter = b.erase(bIter);
}
else if (b[0] == '-')
{
isPb = false;
bIter = b.erase(bIter);
}
else
isPb = true;
while (*bIter == '0')
{
bIter = b.erase(bIter);
}
eIter = b.rbegin();
while (isRb && *eIter == '0')
{
string::iterator retIter = b.erase(--eIter.base());
eIter = string::reverse_iterator(retIter);
if (*eIter == '.')
{
b.erase(--eIter.base());
break;
}
}
eIter = a.rbegin();
if (*eIter == '.')
{
string::iterator retIter = a.erase(--eIter.base());
}
eIter = b.rbegin();
if (*eIter == '.')
{
string::iterator retIter = b.erase(--eIter.base());
}
if (isPa != isPb && a != "" || a != b)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}