Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
Input
each test case contains two numbers A and B.
Output
for each case, if A is equal to B, you should print "YES", or print "NO".
Sample Input
1 2 2 2 3 3 4 3
Sample Output
NO YES YES NO
Author
8600 && xhd
Source
Recommend
分析:
本题涉及到大数及小数点问题,故不能简单比较。
超时代码:
#include<stdio.h>
#include<string.h>
char a1[15000],a2[15000],b1[15000],c1[15000],b2[15000],c2[15000];
int main()
{
int p1,p2,j,l,t1,i,t2,m1,m2,q1,q2;
while(scanf("%s%s",a1,a2))
{
j=0;l=0;
m1=m2=0;
p1=strlen(a1);
p2=strlen(a2);
for(i=0;i<p1;i++)
if(a1[i]=='.')
{
m1=1;break;
}
//printf("%d\n",m1);
if(m1==0)
{
for(i=0;i<p1;i++)
b1[j++]=a1[i];
b1[j]='\0';
// for(i=0;i<j;i++)
// printf("%c",b1[i]);
}
else {
for(i=p1-1;i>=0;i--)
if(a1[i]!='0')
{
t1=i;
break;
}
if(a1[t1]=='.')
{
for(i=0,j=0;i<=t1-1;i++)
b1[j++]=a1[i];
b1[j]='\0';
// for(i=0;i<t1-1;i++)
//printf("%c",b1[i]);
//printf("1\n");
}
else{
for(i=i-1;a1[i]!='.';i--)
b1[j++]=a1[i];
b1[j]='\0';
for(i=i-1;i>=0;i--)
c1[l++]=a1[i];
c1[l]='\0';
// for(i=0;i<l;i++)
// printf("%c",c1[i]);
}
}
for(i=0;i<p2;i++)
if(a2[i]=='.')
{
m2=1;break;
}
if(m2==0)
{
for(i=0,j=0;i<p2;i++)
b2[j++]=a2[i];
b2[j]='\0';
//for(i=0;i<j;i++)
//printf("%c",b2[i]);
}
else {
j=0;
for(i=p2-1;i>=0;i--)
if(a2[i]!='0')
{
t2=i;
break;
}
if(a2[i]=='.')
{
q2=i;
for(i=0,j=0;i<=q2-1;i++)
b2[j++]=a2[i];
b2[j]='\0';
//for(i=0;i<j;i++)
// printf("%c",b2[i]);
}
else{
for(i=i-1,j=0;a2[i]!='.';i--)
b2[j++]=a2[i];
b2[j]='\0';
for(i=i-1,l=0;i>=0;i--)
c2[l++]=a2[i];
c2[l]='\0';
}
}
if(strcmp(b1,b2)==0&&strcmp(c1,c2)==0)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
此代码开拓出四个数组存储。但属超时代码!!!!!
故又换一种方法。
ac代码:
#include <stdio.h>
#include <string.h>
char a[150000],b[150000];
void f(char *s)
{
int lens;
lens=strlen(s);
if(strchr(s,'.')!=NULL)
{
while(s[--lens]=='0') ;
if(s[lens]=='.') lens--;
s[lens+1]='\0';
}
}
int main()
{
while(scanf("%s%s",a,b)==2)
{
f(a);
f(b);
if(strcmp(a,b)==0) printf("YES\n");
else printf("NO\n");
}
return 0;
}