HDOJ 2054 A == B ?

来源:互联网 发布:a1431支持什么网络 编辑:程序博客网 时间:2024/04/29 05:48

超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2054


这道题坑特别多:


放几组数据:

// 均为YES0.0 0.00-0 0-0. +.00.1 00.104 4+1 1-1 -1.01.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_JUDGEconst ifstream inputFile("1.txt");Redirect(cin, inputFile);#endifstring 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);}elseisPa = 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);}elseisPb = 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;elsecout << "YES" << endl;}return 0;}


0 0
原创粉丝点击