hdu 2054 A==B?

来源:互联网 发布:搜索引擎与大数据 编辑:程序博客网 时间:2024/06/07 11:33

hdu 2054 A==B?

看到题目时 开心的一匹 以为是个水题 结果刷了半天 还没A  最后去搜博客 

 题目描叙:就是给你两个数,判断他们是否相等,如果相等就输出 YES,不相等就输出 NO。

 解题思路:开始就直接去 int a,b; 判断他们是否相等,结果WA,看来还是太年轻。首先,有可能是个很大很大的数,所以要用字符,然后还要判断这个数前面和小数点后面有没有多余的0,比如说 0001234.4560 和1234.456 就是相等的,所以要消除前面和小数点后面的0,然后再去判这两个字符串是否相等,strcmp()函数判字符串是否相等。

能AC 的代码:

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;char a[100000],b[100000];void change(char s[]){    int i,len;    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)!=EOF)    {        change(a);        change(b);        if(strcmp(a,b))        printf("NO\n");        else        printf("YES\n");    }    return 0;}

     但是有bug,只能说测试机太水了。

 上面的代码只能  去掉小数点后面的0,不能去前面多余的0。

 测试样例:

 本人觉得能ac的代码,却是WA ,代码如下:

#include<iostream>#include<cstdio>#include<cstring>char a[10000],b[10000];using namespace std;void fuck(char *str){    int i,len;    char *p=str;    while(*p=='0')    {        p++;    }    strcpy(str,p);    len=strlen(str);    if(strstr(str,"."))    {        for(i=len-1;str[i]=='0';i--)        {            str[i]='\0';            len--;        }    }    if(str[len-1]=='.')        str[len-1]='\0';    //printf("%s\n",str);}int main(){    while(scanf("%s%s",a,b)!=EOF)    {        fuck(a);        fuck(b);        if(!strcmp(a,b))            printf("YES\n");        else            printf("NO\n");    }    return 0;}

坚持,加油刷题!


0 0
原创粉丝点击