读书人

hdoj2054一直WA解决方法

发布时间: 2012-10-20 14:12:48 作者: rapoo

hdoj2054一直WA
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
while(cin>>a>>b)
{
int m1=a.size();
int m2=b.size();//记录字符串的长度
int n1=0,n2=0;
while(a[n1]=='0')//去掉前0
n1++;
while(b[n2]=='0')
n2++;
int t=0;
int i=n1,j=n2;
for(;i<m1 && j<m2; i++,j++)//比较所在的是否相等
{
if(a[i]!=b[j])
{
t=1;
break;
}
}
if(t==1)
{
cout<<"NO"<<endl;
continue;
}//字符的小数点还是要比较的
if((i<m1) && (a[i]=='.'))
i++;
if((j<m2) && (b[j]=='.'))
j++;
while(i<m1)//看剩余的是否为0
{
if(a[i]!='0')
{
t=1;
break;
}
i++;
}
while(j<m2)
{
if(b[j]!='0')
{
t=1;
break;
}
j++;
}
if(t==1)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}

[解决办法]
LZ可用以下输入调试程序:
1100 11
12300 123
即较大数的前面部分与较小数相同,然后是若干0.
LZ程序在判断前面部分相同,后面是0时,则输出YES。
[解决办法]
楼主参考下:

C/C++ code
#include<stdio.h>#include<string.h>int main(){ char a[100024],b[100024],a1[100024],b1[100024]; int i,la,lb,sign,j,k1,k2; for (;scanf("%s%s",a,b)!=EOF;) {  la=strlen(a),lb=strlen(b);j=0;  sign=0;k1=0;k2=0;  for (i=0;i<la;i++)  {   if(sign==0&&a[i]!='0')   {sign=1;}   if(sign==1)   a1[j++]=a[i];   if(a[i]=='.')   k1=1;  }  a1[j]='\0';  j=0;sign=0;  for (i=0;i<lb;i++)//去掉b的前导0  {   if(sign==0&&b[i]!='0')    {sign=1;}   if(sign==1)   b1[j++]=b[i];   if(b[i]=='.')   k2=1;  }  b1[j]='\0';  la=strlen(a1);lb=strlen(b1);  for (i=la-1;a1[i]!='.'&&k1==1;i--)  {   if(a1[i]=='0')   a1[i]='\0';   else   k1=0;  }  if(k1==1)   a1[i]='\0';  for (i=lb-1;b1[i]!='.'&&k2==1;i--)  {   if(b1[i]=='0')    b1[i]='\0';   else k2=0;  }  if(k2==1)   b1[i]='\0';  if(strcmp(a1,b1)==0)  printf("YES\n");  else  printf("NO\n"); } return 0;} 

读书人网 >C++

热点推荐