কম্পিউটার টিউটোরিয়াল

C++-এ সমান রেশনাল নাম্বার চেক করা

সমস্যা বিবরণ

দুটি স্ট্রিং 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)

  1. C++-এ দুটি রেশনাল নম্বরের মধ্যে বড়টি বের করুন

  2. সি++-এ ইকুইডিজিটাল নম্বর

  3. সি++-এ এমিরপ নম্বর

  4. সি++-এ ডাডেনি নম্বর