问题 : A==B?(给你两个正实数A 、B,判断他们是否相等,如果相等,输出“YES” ,否则输出“NO”。)

本人第一篇博客,如有错,多多包涵,谢谢。
题目描述

给你两个正实数A 、B,判断他们是否相等,如果相等,输出“YES” ,否则输出“NO”。

输入

输入数据有多组,每组包括两个正实数 (可能很大,float,double类型变量都无法存储)。

输出

如果A与B相等,输出“YES” ,否则输出“NO” 。

样例输入 Copy
1.0 1.01
2.0 2.0 
3.0 3.0 
4.0 3.0
样例输出 Copy
NO
YES
YES
NO

思路:

我们先来考虑整数的比较。整数的比较很简单,只要去除数字前面的无效0,然后比较即可

再来考虑小数的比较,小数的话,他的字符不仅限于数字了,还有特殊符号“.”

此时我们可以从后往前识别小数的最后一位,如果是0,说明此位上的数字无效(对比较没有用),如果是非0数字,说明此位上的数字有效,如果识别到了小数点,说明小数点后的数字都无效且都已经删除,那么删除小数点,并退出(防止把整数部分数字给删除了)

代码实现:

#include<bits/stdc++.h>
using namespace std;


int main()
{
	string a, b;
    //存储数据A和B

	while (cin >> a >> b)
	{
		while (a[0] == '0')
		{
			a.erase(0, 1);
		}
        //删除整数部分的无效数字
         
        if (a.find('.') != string::npos)//确保这个数是小数
		for (int i = a.size() - 1; i >= 0; i--)
		{
			if (a[i] == '0' )
			{
				a.erase(i, 1);
			}
			else if (a[i] == '.')//识别到‘.’,要及时退出,防止把整数部分也删除了
			{
				a.erase(i, 1);
				break;
			}
			else
			{
				break;
			}
		}
        //删除小数部分的无效数字和无效小数点


		while (b[0] == '0')
		{
			b.erase(0, 1);
		}
        //删除整数部分的无效数字

        if (b.find('.') != string::npos)//确保这个数是小数
		for (int i = b.size() - 1; i >= 0; i--)
		{
			if (b[i] == '0' )
			{
				b.erase(i, 1);
			}
			else if (b[i] == '.')//识别到‘.’,要及时退出,防止把整数部分也删除了
			{
				b.erase(i, 1);
				break;
			}
			else
			{
				break;
			}
		}
        //删除小数部分的无效数字和无效小数点


		if (a == b)
		{
			cout << "YES"<<'\n';
		}
		else
		{
			cout << "NO" << '\n';
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值