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

题目:

杭电ACM-2054(A==B?)_第1张图片
2054题

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

#include
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
#include
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
#include
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

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

你可能感兴趣的:(杭电ACM-2054(A==B?))