HDU2054 A==B?

Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
 

Input
each test case contains two numbers A and B.
 

Output
for each case, if A is equal to B, you should print "YES", or print "NO".
 

Sample Input
 
 
1 22 23 34 3
 

Sample Output
 
 
NOYESYESNO

费了半天的劲找到的一个例子:0.0  0  只要这个例子输出YES你的代码应该就没问题了。

主要是能好好控制 删去小数点后面的0及小数点然后再比较就行了。一开始WA了以后我看评论区,乱七八糟各种情况都想了,拜托不要想那么多好吗,没有+ -号,也不会出现这种前导0的情况 002 2 正常人会这么写吗啊?啊?啊?我竟然傻傻地去考虑了前导0的情况。。。。。

这道题用字符串比较挺方便的,方法一:

#include<string.h>
#include<stdio.h>
#define N 100000
char a[N],b[N];
int main()
{
    int len1,len2;
    while(scanf("%s%s",a,b)!=EOF)
    {
        int flag1=0,flag2=0;
        len1=strlen(a);
        len2=strlen(b);
        int i;
        for(i=0; i<len1; i++)
            if(a[i]=='.')
                flag1=1;
        for(i=0; i<len2; i++)
            if(b[i]=='.')
                flag2=1;
        if(flag1==1)
        {
            while(a[len1-1]=='0')
            {
                a[len1-1]='\0';
                len1--;
            }
            if(a[len1-1]=='.')
                a[len1-1]='\0';
        }
        if(flag2==1)
        {
            while(b[len2-1]=='0')
            {
                b[len2-1]='\0';
                len2--;
            }
            if(b[len2-1]=='.')
                b[len2-1]='\0';
        }
        if(strcmp(a,b)==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

方法二:(比较复杂)

#include<stdio.h>
#include<string.h>
#define N 100000
char a[N],b[N];
int s1[N],s11[N],s2[N],s22[N];
int main()
{
    int len1,len2,i,j,m1,m2;
    int flag1,flag2,f1,f2;
    while(scanf("%s%s",a,b)!=EOF)
    {
        flag1=0;
        flag2=0;
        f1=0;
        f2=0;
        memset(s1,0,sizeof(s1));
        memset(s11,0,sizeof(s11));
        memset(s2,0,sizeof(s2));
        memset(s22,0,sizeof(s22));
        m1=len1=strlen(a);
        m2=len2=strlen(b);
        for(i=0; i<len1; i++)
            if(a[i]=='.')
            {
                m1=i;
                f1=1;
            }
        for(i=0; i<len2; i++)
            if(b[i]=='.')
            {
                m2=i;
                f2=1;
            }
        for(i=0,j=m1-1; i<m1;i++,j--)
            s1[i]=a[j]-'0';
        for(i=m1+1,j=0; i<len1; i++,j++)
            s11[j]=a[i]-'0';
        for(i=0,j=m2-1; i<m2; i++,j--)
            s2[i]=b[j]-'0';
        for(i=m2+1,j=0; i<len2; i++,j++)
            s22[j]=b[i]-'0';
        if(f1==1)
        {
            while(s11[len1-2-m1]==0)
            {
                if(s11[len1-2-m1]==0)
                    len1--;
            }
            len1++;                    //这里++是因为比如例子0.0  0,0.0小数点后的0消除了之后,这个数字没有小数了//
        }                             //而我下面的判断是整数部分和小数部分相比较,所以我再添一个小数,下面同//
        if(f2==1)
        {
            while(s22[len2-2-m2]==0)
            {
                if(s22[len2-2-m2]==0)
                    len2--;
            }
            len2++;
        }
        for(i=0;i<m1;i++)
            if(s1[i]!=s2[i])
            flag1=1;
         for(i=0;i<len1-m1-1;i++)
            if(s11[i]!=s22[i])
            flag2=1;
        if(flag1==0&&flag2==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值