东华大学 2022 oj c++ 无超纲写法 A==B? (巨坑!!!)

 //睡觉前想着好歹自己写一道题目就睡,然后一看题目,想着好简单,才发现坑巨多

//原本想着再论坛上找一个字符串转数字的函数,先是没找到合适的,后来一想,1000位,肯定会爆,就放弃了这个想法

//后来又注意到了题干中说首末会出现0,于是我想着分三种情况,即都有小数点,一个有一个无,都没有,然后分别去解,但又觉得太麻烦了

//最终的想法是看到了另一位博主的一句话“如果末位0删到了小数点,那么就把小数点也删了”,于是,我就想,我们可以对这个字符串做手术

//手术目的是使整个字符串不存在在“数字大小意义上多余的字符”(即.00直接去除,因为不影响大小),这是我最终思路的关键

//手术顺序:1.去除首“0”(听着好奇怪),这没啥好说的,无论有无小数点,首“0”都是无意义的

                    2.判断有无小数点,如果有,去除尾“0”

                   3.最后再判断最后一项是否是小数点,如果是,去除

//最后利用strcmp比较即可

//注:就算是00000和00.00,删到最后没有了,是会判相等的

AC代码:

#include<iostream>
#include<string>
#include<bits/stdc++.h>
using namespace std;
int existpoint(char a[])
{
	for (int i = 0; a[i] != '\0'; i++)
	{
		if (a[i] == '.')return 1;
	}
	return 0;
}
void removef(char a[])//a为给定数组,n为初始有效元素个数
{
	int n = strlen(a);
	for (int i = 0; i < n - 1; i++)
	{
		a[i] = a[i + 1];
	}
	a[n - 1] = '\0';
}//做一个删除字符串首项的函数
void removel(char a[])
{
	int n = strlen(a);
	a[n - 1] = '\0';
}//做一个删除字符串最后一项的函数
void trans(char a[])
{
	while (a[0] == '0')
	{
		removef(a);
	}
	int len = strlen(a);
	if (existpoint(a)==1)//先判有无小数点,有的话删末位0
	{
		while (a[len - 1] == '0')
		{
			removel(a); len--;
		}
	}
	if (a[len - 1] == '.')
	{
		removel(a); len--;
	}
}

int main()
{
	int n=0;
	cin >> n; getchar();
	char a[1010];
	char b[1010];
	while (cin.getline(a,1010,' '),cin.getline(b,1010),n--)
	{
		
		trans(a); 
		trans(b);
		/*for (int i = 0; a[i] != '\0'; i++)
		{
			cout << a[i];
		}cout << endl;
		
		for (int i = 0; b[i] != '\0'; i++)
		{
		cout << b[i];
		}*/
		if (strcmp(a, b) == 0)
		{
			cout << "YES" << endl;
		}
		else
		{
			cout << "NO" << endl;
		}

	}
	
	//system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值