#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[100000],b[100000],c[100000],d[100000];
void deal(char *s,int k,int len)
{
int i,j;
for(i=0;i<len-k;i++)
s[i]=s[i+k];
for(i=len-k;i<len;i++)
s[i]=0;
len-=k;
if(strchr(s,'.')){ //存在小数点
for(i=len-1;i>=0;i--){
if(s[i]=='0') s[i]=0;
else break;
}
if(s[i]=='.') s[i]=0;
}
}
int main()
{
int i,j,len1,len2,flag,k1,k2;
while(scanf("%s %s",a,b)!=EOF){
len1=strlen(a);
len2=strlen(b);
flag=1; //既要考虑正负,还要考虑前导0,还要考虑小数
for(i=0;i<len1;i++)
if(a[i]>'0'&&a[i]<='9') break;
k1=i;
for(i=0;i<len2;i++)
if(b[i]>'0'&&b[i]<='9') break;
k2=i;
strcpy(c,a); strcpy(d,b);
deal(c,k1,len1);
deal(d,k2,len2);
if(strcmp(c,d)==0) flag=1;
else flag=0;
// printf("%s %s\n%d %d %d\n",c,d,k1,k2,flag);
if(flag){
if((k1==0&&k2>0&&b[k2-1]=='-')||(k1>0&&a[k1-1]=='-'&&k2==0)) flag=0;
else if((k1&&k2&&a[k1-1]=='-'&&b[k2-1]!='-')||(k1&&k2&&a[k1-1]!='-'&&b[k2-1]=='-')) flag=0;
}
if(flag) printf("YES\n");
else printf("NO\n");
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
system("pause");
return 0;
}
下面的是网上搜的。。。
#include <stdio.h>
#include <string.h>
void A(char *s)
{
int len = strlen(s);
char *p = s + len - 1;
if (strchr(s, '.')) // strchr(char *s,char c) 输出字符串中第一次出现字符c的位置
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++; // 去除前导0
while (*pb == '0') pb++;
A(pa); A(pb);
puts(strcmp(pa, pb) ? "NO" : "YES");
}
return 0;
}