HDOJ 2054 A == B ?

超级传送门: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;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值