78 A == B ?
作者: xxx时间限制: 1S章节: 字符串
问题描述 :
给你两个非负实数A和B,如果A等于B,输出 “YES”, 否则输出"NO"
输入说明 :
第一行N,表示有N组测试数据。
以下N行,每行两个非负实数 A和B。每个实数不超过1000位,且可能在前面和后面有0存在。
输出说明 :
对于每组测试数据,如果A和B相等则输出 “YES”, 否则输出 “NO”。
每组测试数据占一行,两组测试数据之间无空行。行首与行尾均无空格。
输入范例 :
2
100.0 00100
0100.1234576 00000000100.123457
输出范例 :
YES
NO
解答思路:
这题有许多需要注意的点,来来回回改了快一个小时,编程能力还是相当不过关啊,给榜上
还一个测试用例都不查的大佬跪了!
简单说说这题需要注意的几点:
1 尽量使用函数,不然代码冗余度太高了
2 要考虑有无小数点以及小数点旁边两位0与非0的情况。尤其需要注意形如111与111.0,后
者开始时最好就把小数点与小数位舍掉,不然判断起来相当麻烦。
AC代码:
#include <cstdio>
#include <cstring>
int findstart(char a[])
{
for(int i=0;i<strlen(a);i++)
{
if(a[i]!='0'|a[i+1]=='.')
{
return i;
}
}
}
int findend(char a[],int flaga)
{
if(flaga==1)
{
int end;
for(int i=strlen(a)-1;i>=0;i--)
{
if((a[i]>'0'&&a[i]<='9')||a[i-1]=='.')
{
end=i;
break;
}
}
if(a[end]=='0'&&a[end-1]=='.')
{
return end-2;
}
else
{
return end;
}
}
else
{
return strlen(a)-1;
}
}
int main(){
int n;
scanf("%d",&n);
while(n--)
{
char a[1020],b[1020];
scanf("%s %s",a,b);
int astart,aend,bstart,bend;
astart=findstart(a);
bstart=findstart(b);
int flaga=0,flagb=0;
for(int i=0;i<strlen(a);i++)
{
if(a[i]=='.')
{
flaga=1;
break;
}
}
for(int i=0;i<strlen(b);i++)
{
if(b[i]=='.')
{
flagb=1;
break;
}
}
aend=findend(a,flaga);
bend=findend(b,flagb);
if(astart-aend!=bstart-bend)
{
printf("NO\n");
}
else
{
int tag=1;
for(int i=0;i<aend-astart+1;i++)
{
if(a[astart+i]!=b[bstart+i])
{
tag=0;
break;
}
}
if(tag==0)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
}
}
}