Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 두 유리수 중 최댓값 찾는 방법

문제 개요

이 문제에서는 두 개의 유리수(Rational Number)가 주어지며, 우리의 과제는 두 유리수 중 더 큰 값을 찾는 것입니다.

여기서 유리수는 p/q 형태로 표현됩니다.

예시를 통해 문제를 이해해 보겠습니다.

입력: rat1 = 5/4, rat2 = 3/2

출력: 3/2

설명:

5/4 = 1.25
3/2 = 1.5

1.5가 1.25보다 크므로 두 수 중 최댓값은 3/2입니다.

풀이 접근 방식

이 문제를 해결하는 가장 간단한 방법은 학교 시절 분수를 비교하던 방식과 유사한 방법을 사용하는 것입니다.

구체적인 단계는 다음과 같습니다.

1. 두 분모의 최소공배수(L.C.M)를 구합니다.
2. 각 분모가 최소공배수가 되도록 분자를 적절히 곱하여 통분합니다.
3. 공통 분모 상태에서 분자 값이 더 큰 유리수가 바로 최댓값이 됩니다.

이 방식은 실수 연산으로 인한 오차 없이 정수 연산만으로 정확하게 두 유리수를 비교할 수 있다는 장점이 있습니다.

솔루션 구현 예제

#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;
    int ratOneDen = 4;
    int ratTwoNum = 3;
    int 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

코드 설명

findLCM 함수: 유클리드 호제법으로 구한 최대공약수(__gcd)를 이용해 두 수의 최소공배수를 계산합니다.

maxRational 함수: 두 분모의 최소공배수 k를 구한 뒤, 각 분자를 k로 나눈 몫을 곱해 통분된 분자 값을 만듭니다. 그 후 두 분자를 비교하여 더 큰 분자를 가진 유리수를 출력합니다.

예제에서는 5/4와 3/2를 비교하며, 분모의 최소공배수는 4이므로 5/4 → 5, 3/2 → 6으로 변환됩니다. 6 > 5이므로 3/2가 출력됩니다.