সমস্যা বিবরণ
দুটি স্ট্রিং S এবং T দেওয়া থাকলে, সেগুলো একই রেশনাল নাম্বার কিনা তা চেক করতে হবে। স্ট্রিংগুলো রিপিটিং ডেসিমেল বোঝাতে প্যারেনথেসিস ব্যবহার করতে পারে।
উদাহরণ
S = "0.(52)", T = "0.5(25)" → আউটপুট = true (দউই ১/৬ বোঝায়)
সমাধান পদ্ধতি
- রিপিটিং পার্ট থাকলে সেটি ২০ বার রিপিট করে ডেসিমেল স্ট্রিং বানানো হয়।
- stod() দিয়ে ডাবলে কনভার্ট করে তুলনা করা হয়।
- নন-রিপিটিং কেসে সরাসরি stod() ব্যবহার করা হয়।
C++ বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
class Solution {
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);
}
public:
bool isRationalEqual(string S, string T) {
return f(S) == f(T);
}
};
int main() {
Solution ob;
cout << ob.isRationalEqual("0.(52)", "0.5(25)");
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: "0.(52)", "0.5(25)"
আউটপুট: 1 (true)