本题中的一个难点是怎么判断是否相等,如果自己写判断的话是不是很麻烦,判断整数之后再去判断小数部分,那么我们这题的另一个难点就要登场了,第一个难点让本题的情况变得复杂,第二个难点让本题变得很难想到怎么判断,这时就要用到我们的数据量了,他是说小数点最少为四位数,那么两个数的最大公倍数就是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;
}
};