判断两个数是否相等,这题坑会比较多,而且给的数值超过64位,所以要用字符串解决问题。
然后大概有这些坑:
1.给的样例前可能有无意义的0,例如002 02;
2.可能存在小数点,且小数点的数结尾可能存在无意义的0,例如2.00 2.0;
3.可能会有负数,要考虑符号问题,应该没有加号,反正我没考虑;
4.-0和0是相等的;
5.用字符串的存储数的时候要把字符串开到50000之多,否则会报错。
差不多就这些坑,,,
下面是代码:(可能比较繁琐,但是我懒得改了(……))
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,c,d,m,n,t,i,o,p,q,u,v;
char A[50000],B[50000];
while(~scanf("%s%s",A,B))
{
c=0,d=0;
a=strlen(A);
b=strlen(B);
for(i=0;i<a;i++)
{
if(A[i]!='-'&&A[i]!='0')break;
c++;
}
for(i=0;i<b;i++)
{
if(B[i]!='-'&&B[i]!='0')break;
d++;
}
u=0;
for(i=c;i<a;i++)
{
if(A[i]=='.')u=1;
}
if(u==1)
{
for(i=a-1;i>=c;i--)
{
if(A[i]!='0')break;
a--;
}
}
v=0;
for(i=d;i<b;i++)
{
if(B[i]=='.')v=1;
}
if(v==1)
{
for(i=b-1;i>=d;i--)
{
if(B[i]!='0')break;
b--;
}
}
if(u==1&&v==0)
{
b++;
B[b-1]='.';
}
if(u==0&&v==1)
{
a++;
A[a-1]='.';
}
n=0,m=0,t=0;
for(i=c;i<a;i++)
{
if(A[i]>='0'&&A[i]<='9')n=1;
}
for(i=d;i<b;i++)
{
if(B[i]>='0'&&B[i]<='9')m=1;
}
if(n==0&&m==0)
{
printf("YES\n");
t=1;
}
if(t==0)
{
p=1;
if((A[0]=='-'&&B[0]!='-')||(B[0]=='-'&&A[0]!='-'))
{
printf("NO\n");
p=0;
}
if(p==1)
{
q=1;
if(c-a!=d-b)
{
printf("NO\n");
q=0;
}
if(q==1)
{
o=1;
for(i=c;i<a;i++)
{
if(A[i]!=B[d++])
{
o=0;
break;
}
}
if(o==0)
{
printf("NO\n");
}
else printf("YES\n");
}
}
}
}
}