/*杭电2054.
此题我的想法是,先去掉输入数前面的0,之后再比较字符串的长短,使之相等长,再比较。
不过在实行过程中,遇到了很多的麻烦,刚开始没有注意数值为零的问题,之后添加了些条件。
总之是遇到什么问题就解决什么,导致代码这么的臃肿。真的惭愧!*/
#include<stdio.h>
#include<string.h>
int main(void)
{
void change(char str[],char str1[]);
char str1[100024],str2[100024],str3[100024],str4[100024];
int len1,len2,i;
int flag,sign;//分别用flag,sign标记是否有'.',来判断0应该加在'.'后面
while(scanf("%s%s",str1,str2)!=EOF)
{
len1=0;len2=0;
flag=0,sign=0;
getchar();
change(str1,str3);
change(str2,str4);
len1=strlen(str3);
len2=strlen(str4);
for(i=0;str3[i]!='\0';i++)
{
if(str3[i]=='.')
{
flag=1;
break;
}
}
for(i=0;str4[i]!='\0';i++)
{
if(str4[i]=='.')
{
sign=1;
break;
}
}
if(flag==0&&sign==1)
{
if(len1>len2)
{
printf("NO\n");
continue;
}
else if(len1<len2)
{
str3[len1]='.';
for(i=len1+1;i<=len2-1;i++)
str3[i]='0';
str3[i]='\0';
}
else
;
}
else if(flag==1&&sign==0)
{
if(len1>len2)
{
str4[len2]='.';
for(i=len2+1;i<=len1-1;i++)
str4[i]='0';
str4[i]='\0';
}
else if(len1<len2)
{
printf("NO\n");
continue;
}
else
;
}
else if(flag==0&&sign==0)//这也是最后遇到的一个问题,其实当没有'.'时是不用任何操作的
{
;
}
else
{
if(len1>len2)
{
for(i=len2;i<=len1-1;i++)
str4[i]='0';
str4[i]='\0';
}
else if(len1<len2)
{
for(i=len1;i<=len2-1;i++)
str3[i]='0';
str3[i]='\0';
}
else
;
}
if(strcmp(str3,str4)==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
void change(char str[],char str1[])
{
int i,len=0,j=0,t=0,flag=0,sign=0;
len=strlen(str)-1;
for(i=0;i<=len;i++)
{
if(str[i]!='0')
{
if(str[i]=='.')
flag=1;
t=i;
sign=1;
break;
}
sign=0;//此处的sign是标记是不是输入的数为0
}
if(sign==1)
{
if(flag==1)
{
str1[j]='0';
j=1;
for(i=t;i<=len;i++)
{
str1[j]=str[i];
j++;
}
str1[j]='\0';
}
else
{
for(i=t;i<=len;i++)
{
str1[j]=str[i];
j++;
}
str1[j]='\0';
}
}
else
{
str1[0]='0';
str1[1]='.';
str1[2]='0';
str1[3]='\0';
}
}
HDOJ 2054
最新推荐文章于 2019-06-19 23:53:32 发布