HDU2054 A==B?
非常坑的一道题,看上去水到暴。。顺手用__int64,wa了,然后才发现没这么简单。
1、统一正负号
2、去掉先导零
3、去掉小数点后末尾的0
3、各种用0表示的坑 +0 -0 +0.00 -0.000都是yes...
不要小看水题。。ORZ
[cpp]
#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
{ 
补充:软件开发 , C# ,