Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số hữu tỷ bằng nhau trong C++

Cho hai chuỗi S, T biểu diễn số hữu tỷ (có thể có phần lặp lại trong ngoặc đơn). Kiểm tra xem chúng có biểu diễn cùng một số không.

Ví dụ: S="0.(52)", T="0.5(25)" → true (cả hai đều bằng 52/99).

Giải thuật

  1. Hàm f(S) chuyển chuỗi thành số thực:
    • Tìm vị trí '('.
    • Nếu có phần lặp: tách phần cơ sở (base) và phần lặp (rep). Lặp rep 20 lần nối vào base, chuyển thành double.
    • Nếu không có phần lặp: chuyển trực tiếp thành double.
  2. So sánh f(S) == f(T).

Ví dụ mã C++

#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);
    }
};
int main(){
    Solution ob;
    cout << (ob.isRationalEqual("0.(52)", "0.5(25)"));
}

Đầu vào

"0.(52)", "0.5(25)"

Đầu ra

1