hdu 2054

#include <iostream>
#include <cstring>
using namespace std;

int find_point(char a[])   //此函数是为了寻找字符数组中的'.'的位置,若有,则返回其位置,若无,则返回-1;
{
    int i,k=-1,len;
    len=strlen(a);
    for (i=0;i<len;i++)
    {
        if (a[i]=='.')
        {
            k=i;
            break;
        }
    }
    return k;
}

char change (char a[])   //字符串数组本就是一个指针数组,故可以用虚实结合;此函数是为了去掉字数组a[1000]中多余的0;
{
    int i,j,k,len;
    char zf;
    k=find_point (a);
    for (i=0;;i++)   //统计输入了多少个字符;
    {
        if (a[i]=='\0')
        {
            len=i;
            break;
        }
    }
    if (k>=0) j=k;   //避免在下面的计算中当0.0型出现时把小数点改写为'\0'导致的计算错误
    else j=len;
    if (a[0]=='-') zf=a[0];
    else zf='+';
    for (i=0;i<=j-1;i++)   //去掉字符串前面多余的'0'  ,  '+'  ,  '-'字符;
    {
        if (a[i]<'1' && a[i+1]<'1') a[i]='\0';   //由于'+'  ,  '-'  ,  '.'和'0'的ASCII编码都小于'1',故只用一个判断条件;
        else
        {
            if (a[i]<'1' && a[i+1]>'0')
            {
                a[i]='\0';
            }
            break;
        }
    }
    if (k>=0)   //去掉小数点后多余的'0'字符;
    {
        for  (i=len-1;i>=k;i--)
        {
            if (a[i]=='0' || a[i]=='.') a[i]='\0';
            else break;
        }
    }
    if (k==len-1) a[k]='\0';
    for (i=0,j=0;i<len;i++)   //把输入后经处理留下的字符重新赋给a;
    {
        if (a[i]!='\0')
        {
            a[j]=a[i];
            j++;
        }
    }
    a[j]='\0';    //由于strcmp函数只比较到'\0'为止,所以只要在留下的字符后边加一个'\0'即可;
    if (a[0]=='-' || a[0]=='+') a[0]='\0';
//    cout<<a<<' '<<len<<endl;   //测试1
    return zf;
}

int main()
{
    char a[12001],b[12001],zf1,zf2;
    while (cin>>a>>b)
    {
        zf1=change (a);
        zf2=change (b);
        if (a[0]=='\0' && a[0]==b[0]) cout<<"YES\n";
        else if (strcmp(a,b)==0 && zf1==zf2) cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}

你可能感兴趣的:(hdu 2054)