首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

hdoj2054一直WA解决方法

2012-10-20 
hdoj2054一直WA#includeiostream#includestringusing namespace stdint main(){string a,bwhile(cin

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

热点排行