这本来应该是一道挺简单的题目,但是一直少考虑了一些情况,所以做的比较纠结。。
第一:数字前面可能有一大堆0,则必须把这些0去掉。。
第二:如果是小数,则必须也把小数点后多余的0也去掉。。
第三:必须用char型的数组来保存,否则容量不够。。
这道题目的教训是以后思考问题应该要有一个清晰的过程,想问题应该要全面。。。。
#include<iostream>
#include<string>
using namespace std;
char a[1000000];
char b[1000000];
int main()
{
while(cin>>a,cin>>b)
{
char *pa=strchr(a,'.'); //查找第一次出现.的位置
char *pb=strchr(b,'.'); //查找第一次出现.的位置
char *p1=a+strlen(a)-1; //将指针移动数组的最后一个元素
char *p2=b+strlen(b)-1;//将指针移动数组的最后一个元素
if(p1>pa&&pa!=NULL) //把小数点后面多余的0全部去掉
{
while(*p1=='0')
{
*p1='/0';
p1--;
}
}
if(p2>pb&&pb!=NULL) //把小数点后面多余的0全部去掉
{
while(*p2=='0')
{
*p2='/0';
p2--;
}
}
if(*p1=='.') *p1='/0'; //看是否是3.00000这种格式,如果是,则保留为3
if(*p2=='.') *p2='/0'; //看是否是3.00000这种格式,如果是,则保留为3
p1=a;
p2=b;
while(*p1=='0') //如果前面是0,数组的地址前移
p1++;
while(*p2=='0') //如果前面是0,数组的地址前移
p2++;
if(!strcmp(p1,p2))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}