HDU2054
この问题は実际にはっきり言っていないで、WAはn回!!!
テーマは主に文字列に対する操作を考察し,すなわち入力数は長い文字列であってもよい.
テーマも分析されなくなり、ネット上には多くのコードがあります.ここでは、テストが正しい場合はACに問題がないデータのセットを示します.
テストデータ:
0 -0
0 +0
123.123 +00123.12300
100.00 100
.1 0.1
000.000 0
123456789123456789 123456789123456789
1 1
000001000. 1000
結果:
YES
YES
YES
YES
YES
YES
YES
YES
YES
コード:
/*
, ,
,
NULL,
*/
#include<iostream>
#include<string>
using namespace std;
#define N 1000000
char a[N],b[N];
bool judge_p_m(char c[],char d[]) //
{
if((c[0]=='-' && d[0]=='-') || (c[0]!='-' && d[0]!='-'))
return true;
else
return false;
}
char* judge_dec(char e[])
{
int i,len,rem=-1;
if( e[0]=='+' || e[0]=='-' ) // + - ,
e++;
len=strlen(e);
for(i=0;i<len;i++) //
if(e[i]=='.')
{
rem=i;
break;
}
if(rem==-1) //
{
for(i=0;i<len;i++)
if(e[i]=='0')
{
e[i]=NULL;
}
else
break;
}
else if(rem==0) //
{
for(i=len-1;i>=0;i--)
if(e[i]=='0' || e[i]=='.')
e[i]=NULL;
else
break;
if(e[0]=='.')
{
for(i=strlen(e);i>0;i--)
e[i]=e[i-1];
e[0]='0';
e[strlen(e)+1]=NULL;
}
}
else if(rem==len-1) //
{
e[rem]=NULL;
for(i=0;i<len-1;i++)
if(e[i]=='0')
{
e[i]=NULL;
}
else
break;
}
else //
{
for(i=0;i<rem-1;i++)
{
if(e[i]=='0')
{
e[i]=NULL;
}
else
break;
}
for(i=len-1;i>=rem;i--)
{
if(e[i]=='0' || e[i]=='.')
e[i]=NULL;
else
break;
}
if( e[rem]==NULL && e[rem-2]==NULL && e[rem-1]=='0' )
e[rem-1]=NULL;
}
for(i=0;i<len;i++) // NULL
if(e[i]!=NULL)
{
e=e+i;
break;
}
return e;
}
int main()
{
while(cin>>a>>b)
{
if( judge_p_m(a,b) )
{
if( strcmp( judge_dec(a), judge_dec(b) )==0 )
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
else
{
if( strlen( judge_dec(a) )==0 && strlen( judge_dec(b) )==0 )
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}
れんがたたき歓迎