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