力扣每日一题 --- 972. 相等的有理数

本文介绍了一个C++编程中的问题,如何高效地判断两个看似复杂的带有小数点的字符串是否相等。关键在于处理小数部分,通过扩展小数点后至四位,然后转换为浮点数进行精确比较。
摘要由CSDN通过智能技术生成

 本题中的一个难点是怎么判断是否相等,如果自己写判断的话是不是很麻烦,判断整数之后再去判断小数部分,那么我们这题的另一个难点就要登场了,第一个难点让本题的情况变得复杂,第二个难点让本题变得很难想到怎么判断,这时就要用到我们的数据量了,他是说小数点最少为四位数,那么两个数的最大公倍数就是12,也就是最多小数位12位之后那么肯定为一个周期了,超过12位的肯定是在重复了,没必要,那么可以将原有的字符串中的括号内的扩充到12位,再用库里的函数转成浮点数进行判断就可以做出这题了,这题最大难点就是解决判断小数部分,第一个难点比较容易解决,转成浮点数判断就行,这样就变成一个简单题了

class Solution {
public:
    bool isRationalEqual(string s, string t) 
    {
          auto decimal = [&](string x)->double
          {
               int l = x.find('('), r = x.find(')');
               if (l != -1 && r != -1)
               {
                   string left = x.substr(0, l);
                   string mid = x.substr(l + 1, r - l - 1);
                   string right = x.substr(r + 1);
                   string str = left + mid + mid + mid + mid + mid + mid + mid + mid + mid + mid + mid+ mid+mid+mid+right;
                   return atof(str.c_str());
               }
               else return atof(x.c_str());
          };
          return fabs(decimal(s) - decimal(t)) < 1e-8;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乖的小肥羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值