Computer >> Máy Tính >  >> Lập trình >> C ++

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

Giả sử chúng ta có hai chuỗi, chúng là S và T, mỗi chuỗi biểu thị một số hữu tỉ dương, Chúng ta phải kiểm tra xem chúng có biểu diễn cùng một số hay không. Các chuỗi có thể sử dụng dấu ngoặc đơn để biểu thị phần lặp lại của số hữu tỉ.

Như chúng ta biết rằng số hữu tỉ có thể được biểu diễn bằng tối đa ba phần:một phần nguyên, một phần không lặp lại và một phần lặp lại. Số sẽ được biểu diễn theo một trong ba cách sau -

  • Chỉ phần nguyên (như 0, 12, 123)

  • IntegerPart.NonRepeatingPart (như 0.5, 1.0, 2.12, 2.0001)

  • IntegerPart.NonRepeatingPart (Phần lặp lại>) (như 0,1 (6), 0,9 (9), 0,00 (1212))

Ví dụ:Cả 0,1 (6) hoặc 0,1666 (6) hoặc 0,166 (66) đều là đại diện đúng của 1/6.

Vì vậy, nếu đầu vào giống như S ="0. (52)" và T ="0.5 (25)", thì đầu ra sẽ là True.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm f (), điều này sẽ nhận S,

    • i:=index of '(' in S

    • nếu tôi nằm trong khoảng chiều dài S, thì -

      • base:=chuỗi con của S từ chỉ mục 0 đến i - 1

      • rep:=chuỗi con của S từ chỉ mục i + 1 đến (độ dài của S - i - 3)

      • để khởi tạo j:=0, khi j <20, cập nhật (tăng j lên 1), thực hiện -

        • base:=base + rep

      • trả về cơ sở dưới dạng giá trị thực

    • trả về S dưới dạng giá trị thực

  • Từ chức năng chính, làm như sau -

  • trả về true khi f (S) giống với f (T)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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)"));
}

Đầu vào

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

Đầu ra

1