HDU-2054 A == B ?(高精度字符是否值相同)
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 3Sample Output
NO YES YES NO#include<stdio.h>
#include<string.h>
int searchpoint(char s[],int n)
{
for(int i=0;i<n;i++)
{
if(s[i]=='.')
return 1;
}
return 0; //找小数点
}
int qweitoupoint(char s[],int n)
{
int i,j;
for(i=n-1;i>=0;i--)
{
if(s[i]=='0')
n--;
else
break;
}
if(s[n-1]=='.')n--;
i=0;
if(s[i]=='-'||s[i]=='+')
{
n--;
i++;
}
if(s[i]==0)
{
for(j=i;s[j+1]='0';j++)
{
n--;
}
}
return n; //去小数末尾的0,小数点,前面的0;利用去其长度的方法,
}
int main()
{
int len1,len2;
char s1[100010],s2[100010];
while(scanf("%s%s",s1,s2)!=EOF)
{
int flag=1;
if((s1[0]=='-'&&s2[0]!='-')|| (s2[0]=='-'&&s1[0]!='-')) //在main一开始就处理符号问题 ,只考虑no的情况
{
printf("NO\n");
}
else
{
len1=strlen(s1);
len2=strlen(s2);
if(searchpoint(s1,len1)) //大数比较,用字符数组,去掉不必要的,变于测真正的长度,因为一部分是考长度处理的
{
len1=qweitoupoint(s1,len1);
}
if(searchpoint(s2,len2))
{
len2=qweitoupoint(s2,len2);
}
if(len1!=len2)
{
//两个数的长度不一致,直接可以确定为不相等。
flag=0;
}
else
{
int i=0,j=0;
if(s1[0]=='+'||s1[0]=='-')
{
i=1;
len1++;
}
if(s2[0]=='+'||s2[0]=='-')
{
j=1;
len2++;
} //+,-不能像后面的0那样,利用i<len1消 ,只能这样处理
while(i<len1&&j<len2)
{
if(s1[i]!=s2[j])
{
flag=0;
break;
}
i++;
j++;
}
}
if(flag)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
return 0;
}