hdu---2054A == B ?

A == B ?

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 55882    Accepted Submission(s): 8562


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 2 2 2 3 3 4 3
 

 

Sample Output
NO YES YES NO
 
 
//只能说水过... 数据在hdu---discuss版面有人贴出,这里不再给,版面中数据过了基本就能过了。
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define N 15001
char f1[N],f2[N];
//判断AB是否相等,这里AB是字符串,需要预处理字符串为标准形式。
int main()
{
    freopen("in.txt","r",stdin);
    int i,j,k,T,n,m;int len;
    while(scanf("%s %s",f1,f2)!=EOF){
        //这里分情况吧,为0的比较特殊,单独判断。
        int a1=0,a2=0;int len1=strlen(f1),len2=strlen(f2);
        for(i=0;i<len1;i++)
            if(f1[i]=='.' || f1[i]=='0' || f1[i]=='+' || f1[i]=='-') continue;
            else{a1=1;break;}
        for(i=0;i<len2;i++)
            if(f2[i]=='.' || f2[i]=='0' || f2[i]=='+' || f2[i]=='-') continue;
            else{a2=1;break;}
        if(a1==0 || a2==0){
            //有一个为0的情况!
            if(a1==a2 && a1==0) printf("YES\n");
            else printf("NO\n");
        }
        else{
            //数字都不为0;----先进性预处理;
            int flag=1;
            if(f1[0]=='-' || f2[0]=='-'){
                //两数存在负数;
                if((f1[0]=='-' && f2[0]!='-') || (f1[0]!='-' && f2[0]=='-'))
                {
                    flag=0;printf("NO\n");
                }
                else{
                    //处理‘-’号;之后当做正数处理;
                    if(f1[0]=='-'){
                        for(i=1;i<len1;i++) f1[i-1]=f1[i];
                        len1--; f1[len1]='\0';
                    }
                    if(f2[0]=='-'){
                        for(i=0;i<len2;i++) f2[i-1]=f2[i];
                        len2--;f2[len2]='\0';
                    }
                }
            }
            if(flag){
                if(f1[0]=='+'){
                    for(i=1;i<len1;i++) f1[i-1]=f1[i];
                    len1--; f1[len1]='\0';
                }
                if(f2[0]=='+'){
                    for(i=0;i<len2;i++) f2[i-1]=f2[i];
                    len2--;f2[len2]='\0';
                }
                if(f1[0]=='.'){
                    for(i=len1;i>0;i--) f1[i]=f1[i-1];
                    len1++; f1[0]='0';
                }
                if(f2[0]=='.'){
                    for(i=len2;i>0;i--) f2[i]=f2[i-1];
                    len2++; f2[0]='0';
                }
                //处理两个正数!---分为是否存在小数点两种情况;
                int t,t1,t2;//标志小数点存在与否;
                t=t1=t2=0;m=-1;
                for(i=0;i<len1;i++)
                    if(f1[i]=='.'){ t=1;m=i;break;}//存在小数点;
                if(m!=-1){
                for(i=len1-1;i>m;i--)
                    if(f1[i]=='0'){
                        len1--;f1[len1]='\0';
                    }
                    else break;
                if(f1[len1-1]=='.'){len1--; f1[len1]='\0';}
                }
                //上面处理了后导0;
                //if(f1[m]=='.') ;
                //else m=len1-1;
                for(i=0;i<len1;i++)
                    if(f1[i]=='0') continue;
                    else{
                        t2=i;break;
                    }
                if(t2==m) t2--;//前面都是0;
                for(i=t2;i<=len1;i++)
                    f1[i-t2]=f1[i];
                len1=len1-t2;
                //字符串1处理完毕!

                t=t1=t2=0;m=-1;
                for(i=0;i<len2;i++)
                    if(f2[i]=='.'){ t=1;m=i;break;}//存在小数点;
                if(m!=-1){
                for(i=len2-1;i>m;i--)
                    if(f2[i]=='0'){
                        len2--;f2[len2]='\0';
                    }
                    else break;
                if(f2[len2-1]=='.'){len2--; f2[len2]='\0';}
                }
                //上面处理了后导0;

                //if(f2[m]=='.');
                //else m=len2-1;
                for(i=0;i<len2;i++)
                    if(f2[i]=='0') continue;
                    else{
                        t2=i;break;
                    }
                if(t2==m) t2--;//前面都是0;
                for(i=t2;i<=len2;i++)
                    f2[i-t2]=f2[i];
                len2=len2-t2;

                t=1;
                if(len1!=len2) t=0;
                else{
                    for(i=0;i<len1;i++)
                        if(f1[i]!=f2[i]){
                            t=0;break;
                        }
                }
                if(t) printf("YES\n");
                else printf("NO\n");
            }
        }
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值