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

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

দুটি রেশনাল নম্বর (ভগ্নাংশ আকারে p/q) দেওয়া আছে। তাদের মধ্যে বড়টি বের করতে হবে।

উদাহরণ

ইনপুট: rat1 = 5/4, rat2 = 3/2

  • 5/4 = 1.25
  • 3/2 = 1.5

আউটপুট: 3/2

অ্যালগরিদম: LCM দিয়ে কমন ডিনোমিনেটর

  1. হর দুটির LCM (লগারিদমিক কমন মাল্টিপল) বের করুন।
  2. প্রতিটি ভগ্নাংশকে সেই কমন হরে রূপান্তর করুন: newNum = num * LCM / den।
  3. নিউমেরেটরগুলো কমপেয়ার করুন — বড় নিউমেরেটরওয়ালা ভগ্নাংশই বড়।

C++ প্রোগ্রাম

#include <bits/stdc++.h>
using namespace std;

int findLCM(int a, int b) {
    return (a * b) / (__gcd(a, b));
}

void maxRational(int ratOneNum, int ratOneDen, int ratTwoNum, int ratTwoDen) {
    int k = findLCM(ratOneDen, ratTwoDen);
    int oneNum = ratOneNum * k / ratOneDen;
    int twoNum = ratTwoNum * k / ratTwoDen;
    if (oneNum > twoNum)
        cout << ratOneNum << "/" << ratOneDen;
    else
        cout << ratTwoNum << "/" << ratTwoDen;
}

int main() {
    int ratOneNum = 5, ratOneDen = 4;
    int ratTwoNum = 3, ratTwoDen = 2;
    cout << "The maximum of the two rational Numbers is ";
    maxRational(ratOneNum, ratOneDen, ratTwoNum, ratTwoDen);
    return 0;
}

আউটপুট

The maximum of the two rational Numbers is 3/2

ব্যাখ্যা

  • LCM(4,2) = 4
  • 5/4 = 5/4 (নিউমেরেটর ৫)
  • 3/2 = 6/4 (নিউমেরেটর ৬)
  • 6 > 5 → 3/2 বড়।
  • __gcd GCC বিল্ট-ইন ফাংশন (C++17-এ std::gcd)।

বিকল্প: ক্রস মাল্টিপ্লিকেশন (LCM লাগে না)

// a/b vs c/d → a*d vs c*b
if (ratOneNum * ratTwoDen > ratTwoNum * ratOneDen)
    // প্রথমটি বড়
else
    // দ্বিতীয়টি বড়

এটি ফাস্টার এবং ওভারফ্লো রোধে long long ব্যবহার করুন।

কমপ্লেক্সিটি

  • টাইম: O(log min(den1,den2)) (GCD-এর জন্য)।
  • স্পেস: O(1)।
  1. C++ ব্যবহার করে স্ট্রাকচার অ্যারেতে সর্বোচ্চ মান বের করা

  2. C++ ব্যবহার করে ম্যাট্রিক্সের দুটি ডায়াগোনালের যোগফলের পার্থক্য বের করা

  3. C++-এ 유리 সংখ্যার LCM খুঁজে বের করা

  4. C++-এ রিকারশন বা ইউক্লিডিয়ান অ্যালগরিদম ছাড়া দুই সংখ্যার HCF বের করা