您的位置:首页 > 其它

HDU 2054 A == B ?

2012-02-20 15:15 357 查看
题目: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;
}


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

很无奈啊,网上找的那个看不懂啊,希望哪位路过的帮忙解释下!~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: