美文网首页
杭电ACM-2054(A==B?)

杭电ACM-2054(A==B?)

作者: 1QzUPm_09F | 来源:发表于2017-01-23 20:26 被阅读0次

    题目:

    2054题

    这道题看起来很简单 甚至不用想就会编出以下代码:

    #include<stdio.h>
    int main()
    {
        int a,b;
        while(~scanf("%d%d",&a,&b))
        {
            if(a==b)
                printf("YES\n");
            else
                printf("NO\n");
        }
        return 0;
    }
    

    果断wrong 哈哈哈~~~!!!

    答案肯定不是那么简单的,原因就是高精度问题,如果是超长的数列呢???int、long long、double都放不下呢?所以这道题要用高精度的思想来做→→→开数组

    开数组一定要考虑下面的问题:
    ①5.00000 与 5 一个有小数点一个没有
    ②5.00 与 5000 字符串的长度都一样 但是2个数不一样

    方法也有2个:
    ①去0去小数点
    ②装入新数组

    #include<stdio.h>
    #include<string.h>
    char a[100000],b[100000];
    void change(char s[])
    {
        int len,i;
        len=strlen(s);
        if(strstr(s,"."))
        {
            for(i=len-1;s[i]=='0';i--)
            {
                s[i]='\0';
                len--;
            }
        }
        if(s[len-1]=='.')
            s[len-1]='\0';
    }
    int main()
    {
        while(~scanf("%s%s",&a,&b))
        {
            change(a);
            change(b);
            if(strcmp(a,b)==0)
                printf("YES\n");
            else
                printf("NO\n");
        }
        return 0;
    }
    

    AND——————————————————————————————————————

    #include<stdio.h>
    #include<string.h>
    char a[100000],b[100000],c[100000],d[100000];
    int i,k,len1,len2;
    int main()
    {
        while(~scanf("%s%s",&a,&b))
        {
            len1=strlen(a);
            len2=strlen(b);
            k=len1;
            for(i=len1-1;a[i]=='0';i--);
            if(strstr(a,".")==0)
            {
                i=len1-1;
            }
            for(k=0;k<=i;k++)
                c[k]=a[k];
            if(c[k-1]=='.')
                c[k-1]='\0';
            else
                c[k]='\0';
    
            k=len2;
            for(i=len2-1;b[i]=='0';i--);
            if(strstr(b,".")==0)
            {
                i=len2-1;
            }
            for(k=0;k<=i;k++)
                d[k]=b[k];
            if(d[k-1]=='.')
                d[k-1]='\0';
            else
                d[k]='\0';
    
            if(strcmp(c,d)==0)
                printf("YES\n");
            else
                printf("NO\n");
        }
        return 0;
    }
    

    然后就是一个新学的知识:
    strstr(str,"n");

    if(strstr(a,".")==0)
    判断a数组中是否有"."(小数点)
    

    char *strstr(const char *str1, const char *str2);

    include<string.h>

    找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。

    相关文章

      网友评论

          本文标题:杭电ACM-2054(A==B?)

          本文链接:https://www.haomeiwen.com/subject/ppnabttx.html