HDU 2054 A == B ?

来源:互联网 发布:隐秘录像 知乎 编辑:程序博客网 时间:2024/05/21 10:55

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2054

 

题意:给两个数,判断这两个数是否相等。没有范围没有填写规则

 

代码:

这个是自己写的很长

#include<stdio.h>#include<string.h>int main(){    char s1[100000];    char s2[100000];    int  t;    int i,j;    int l1,l2,r1,r2;    while(scanf("%s %s",s1,s2)!=EOF)    {        /*判断正负号*/        if((s1[0]=='-' && s2[0]!='-' ) || (s1[0]!='-' && s2[0]=='-'))            goto A;        else        {            if(s1[0]=='+' || s1[0]=='-')                s1[0]='0';            if(s2[0]=='+' || s2[0]=='-')                s2[0]='0';        }        /*如果有小数点则从后向前查找0,并记录第一个不为0的位子*/        l1 = strlen(s1)-1;        l2 = strlen(s2)-1;        if(strchr(s1,'.'))            while(s1[l1]=='0')                l1--;        if(strchr(s2,'.'))            while(s2[l2]=='0')                l2--;        if(s1[l1]=='.')l1--;        if(s2[l2]=='.')l2--;        /*从前向后查找0,并记录第一个不为0的位子*/        r1 = 0;        r2 = 0;        while(s1[r1]=='0')            r1++;        while(s2[r2]=='0')            r2++;        /*判断长度*/        if(l1-r1 != l2-r2)            goto A;        /*比较*/        i=r1;        j=r2;        t=1;        for(; i<=l1&&j<=l2 ; i++,j++)            if(s1[i]!=s2[j])            {                t=0;                break;            }        /*输出结果*/        if(t)        printf("YES\n");        else        A:printf("NO\n");    }    return 0;}

这个是在网上找的:

#include <stdio.h>#include <string.h>void A(char *s){    int len = strlen(s);    char *p = s + len - 1;    if (strchr(s, '.'))    while (*p == '0') *p-- = 0;    if (*p == '.') *p = 0;}int main(void){    char *pa, *pb;    char a[100024], b[100024];    while (scanf("%s%s", &a, &b) != EOF)    {        pa = a; pb = b;        while (*pa == '0') pa++;        while (*pb == '0') pb++;        A(pa); A(pb);        puts(strcmp(pa, pb) ? "NO" : "YES");    }    return 0;}

 

分析:在网上找解题报告的时候看到有人把这题归类称库函数的熟练应用。

          很无奈啊,网上找的那个看不懂啊,希望哪位路过的帮忙解释下!~

 

 

原创粉丝点击