A == B ? hdu acm 2054 c++

A == B ?

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


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
 


题意:

比较两个数是否相等;

思路:要去掉前导零,小数点后面的后缀零等;

下面的代码再详细注释说明:

#include<cstdio>
#include<cstring>

char str1[20000],str2[20000];

int main()
{
    int i,j,flag,len1,len2,n;
    while(scanf("%s%s",str1,str2)!=EOF)
    {
        getchar();
        flag=0;
        len1=strlen(str1);
        len2=strlen(str2);
        if(str1[0]=='-'&&str2[0]!='-'||str2[0]=='-'&&str1[0]!='-')//先判断符号 
             printf("NO\n");
        else
    {    
        if(str1[0]=='-'&&str2[0]=='-')
        {
            strcpy(str1,&str1[1]);//拷 贝 函 数,将 str1 从第二个元素开始拷贝; 
            strcpy(str2,&str2[1]); 
            len1--;
            len2--;     
        }     
        for(i=0;i<len1;i++)//处理前面多余的  0; 
        {
           if(str1[i]!='0')
               break;
        }
        strcpy(str1,&str1[i]); 
        len1=strlen(str1);
        for(i=0;i<len1;i++)//判断是否有小数点; 
           if(str1[i]=='.')
           {
                flag=1;
                break;
           }
        n=len1;    
        for(i=n-1;i>=0;i--)  
        {  
            if(flag==1&&str1[i]=='0')//去掉后面多余的  0  ; 
                     --len1;
            else
                break;
        }
         
        for(i=0;i<len2;i++)//同上诉方法,处理第二个,处理前面多余的  0; 
        {
           if(str2[i]!='0')
               break;
        }
        strcpy(str2,&str2[i]); 
        len2=strlen(str2);
        flag=0; 
        for(i=0;i<len2;i++)//判断是否有小数点; 
           if(str2[i]=='.')
           {
                flag=1;
                break;
           }
        n=len2;    
        for(i=n-1;i>=0;i--)  //去掉后面多余的  0  ;
        {  
            if(flag==1&&str2[i]=='0')
                 len2--;
            else
                break;     
        }   
       str1[len1]='\0';   
       str2[len2]='\0';    
       if(str1[len1-1]=='.')//如果最后一位是小数点,也去掉; 
       {
    
           str1[len1-1]='\0';
       }    
       if(str2[len2-1]=='.')//如果最后一位是小数点,也去掉; 
       {
    
           str2[len2-1]='\0';
       }    
       if(strcmp(str1,str2))//处理好之后,比较; 
          printf("NO\n") ;
       else
          printf("YES\n");    
      }
    }
    return 0;
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值