就是比较两个大数是否相等 ,要注意前导0,后置0,正负号,小数点。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
using namespace std;
int main()
{
char a[100000],b[100000];
int flag1,flag2,tmp,tmp1,tmp3,tmp4,mm;
bool tmp2;
bool s1,s2,s3,s4;
while(~scanf("%s%s",a,b))
{
tmp2=false;
s1=s2=s3=s4=false;
mm=0;
tmp=strlen(a);
tmp1=strlen(b);
for(int i=0;i<tmp;i++)
{
if(a[0]=='-')
s1=true;
if(!mm&&a[i]!='0'&&a[i]!='-'&&a[i]!='+')
{
flag1 = i;
mm=1;
}
if(a[i] == '.')
s3=true;
if(i == tmp-1&&!mm)
flag1=i;
}
mm=0;
for(int i=0;i<tmp1;i++)
{
if(b[0]== '-')
s2=true;
if(!mm&&b[i]!='0'&&b[i]!='-'&&b[i]!='+')
{
flag2 = i;
mm=1;
}
if(b[i] == '.')
s4=true;
if(i == tmp1-1&&!mm)
flag2=i;
}
if(s3)
{
for(int i=tmp-1;i>=0;i--)
{
if(a[i] != '0'&&a[i]!='.')
{tmp3=i;break;}
}
}
if(s4)
{
for(int i=tmp1-1;i>=0;i--)
{
if(b[i] != '0'&&b[i]!='.')
{tmp4=i;break;}
}
}
if((s1&&s2)||(!s1&&!s2))
{
if(s3)
tmp=tmp3+1;
if(s4)
tmp1=tmp4+1;
while(flag1<tmp)
{
if(a[flag1] != b[flag2])
break;
if(a[flag1] == b[flag2])
{
flag1++,flag2++;
}
if(flag1 >= tmp&&flag2>=tmp1)
{tmp2=true;break;}
}
}
else if((!s1&&s2)||(!s2&&s1))
{
if(a[flag1]=='0'&&b[flag2] == '0')
tmp2 =true;
}
if(tmp2)
printf("Yes\n");
else
printf("No\n");
}
}