东华大学2020考研计算机OJ题目解答分享——进阶篇(78)

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

}



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值