您的位置:首页 > 其它

【坑】HDU2054 A==B?

2013-05-14 11:10 225 查看
链接:点击打开链接

非常坑的一道题,看上去水到暴。。顺手用__int64,wa了,然后才发现没这么简单。

1、统一正负号

2、去掉先导零

3、去掉小数点后末尾的0

3、各种用0表示的坑 +0 -0 +0.00 -0.000都是yes...

不要小看水题。。ORZ

#include <iostream>
#include <string>
#include <cstdio>
#include <ctype.h>
using namespace std;

int main()
{
	string a,b;
	string blank="";
	while(cin>>a>>b)
	{
		bool a0=1,b0=1;
		//0单独判断之,防止0.00 -0 +0.000 +00.000.......等很多种 
		for(int i=0;i<a.length();i++)
		{
			if(a[i]!='0' && a[i]!='.' && a[i]!='+' && a[i]!='-')
			{
				a0=0;
				break;
			}
				
		} 
		for(int i=0;i<b.length();i++)
		{
			if(b[i]!='0'&&b[i]!='.'&&b[i]!='+'&&b[i]!='-')
			{
				b0=0;
				break;
			}
			
		}
		if(a0==1 && b0==1)
		{
			cout<<"YES"<<endl;
			break;
		}
		//1-防止+0 0这种 
		if(isdigit(a[0]))
			a.insert(0,"+");
		if(isdigit(b[0]))
			b.insert(0,"+");
			
		int posa=a.length()-1;
		int posb=b.length()-1;
		int befzeroa=0,befzerob=0;
		
		
		for(int j=1;j<posa;j++)
		{
			if(a[j]=='0')
				continue;
			else
			{
				befzeroa=j-1;
				break;
			}
				
		}
		for(int j=1;j<posb;j++)
		{
			if(b[j]=='0')
				continue;
			else
			{
				befzerob=j-1;
				break;
			}
			
		}
		//2-防止009.7  9.7这种 
		a.erase(1,befzeroa); //正确的删除用法 
		b.erase(1,befzerob);
	
		int lastzeroa=a.length();
		int lastzerob=b.length();
		
		for(int i=1;i<a.length();i++)
		{
			if(a[i]=='.')
				posa=i;
		}
		for(int j=1;j<b.length();j++)
		{
			if(b[j]=='.')
				posb=j;
		}
		
		for(int p=a.length()-1;p>posa;p--)
		{
			if(a[p]=='0')
			{
				a.erase(p,1);
			}
			else
			{
				break;
			}
		}
		
		for(int t=b.length()-1;t>posb;t--)
		{
			if(b[t]=='0')
			{
				b.erase(t,1);
			}
			else
			{
				break;
			}
		}
	
	
		//3-防止3.0 --- 3 这种 
		if(a[a.length()-1]=='.')
			a.erase(a.length()-1,1);
		if(b[b.length()-1]=='.')
			b.erase(b.length()-1,1);
		
		
		//cout<<a<<" "<<b<<endl;
		if(a==b)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
		
		
		
	}
	
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: