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;}