C++ 中相等的有理数
假设我们有两个字符串 S 和 T,每个字符串都表示一个正有理数。我们需要检查它们是否表示相同的数字。
众所周知,有理数最多可以用三个部分表示:整数部分、非重复部分和重复部分。数字将以以下三种方式之一表示:
仅整数部分(如 0、12、123)
整数部分.非重复部分(如 0.5、1.0、2.12、2.0001)
整数部分.非重复部分(重复部分>)(如 0.1(6)、0.9(9)、0.00(1212))
例如,0.1(6) 或 0.1666(6) 或 0.166(66) 都是 1/6 的正确表示。
因此,如果输入像 S = "0.(52)" 和 T = "0.5(25)",则输出将为 True。
为了解决这个问题,我们将遵循以下步骤:
定义一个函数 f(),它将接收 S,
i := S 中 '(' 的索引
如果 i 在 S 长度的范围内,则:
base := 从索引 0 到 i - 1 的 S 的子字符串
rep := 从索引 i + 1 到 (S 的长度 - i - 3) 的 S 的子字符串
对于初始化 j := 0,当 j < 20 时,更新(将 j 增加 1),执行:
base := base + rep
返回 base 作为实数值
返回 S 作为实数值
从主函数执行以下操作:
当 f(S) 与 f(T) 相同的时候返回 true
让我们看看下面的实现,以便更好地理解:
示例
#include <bits/stdc++.h>
using namespace std;class Solution {
public:
bool isRationalEqual(string S, string T){
return f(S) == f(T);
}
double f(string S){
auto i = S.find("(");
if (i != string::npos) {
string base = S.substr(0, i);
string rep = S.substr(i + 1, S.length() - i - 2);
for (int j = 0; j < 20; ++j)
base += rep;
return stod(base);
}
return stod(S);
}
};
main(){
Solution ob;
cout << (ob.isRationalEqual("0.(52)", "0.5(25)"));
}输入
"0.(52)", "0.5(25)"
输出
1
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP