알고리즘/백준

[백준][C++] 1735: 분수 합

KANTAM 2024. 1. 14. 15:19

문제

풀이

유클리드 호제법

 

간단한 유클리드 호제법 문제이다. 아래는 a, b의 최대공약수를 반환하는 유클리드 호제법 함수이다.

int gcd(int a, int b)
{
    if (a < b)
    {
        swap(a, b);
    }
    
    int temp;
    while (b != 0)
    {
        temp = a % b;
        a = b;
        b = temp;
    }

    return a;
}

 

문제에서 주어진 분수를 먼저 통분하여 합을 계산한다. 합한 분자와 분모의 최대공약수를 구하여 각각에 나누면 기약 분수가 된다.

코드

#include <iostream>

using namespace std;

int gcd(int a, int b)
{
    if (a < b)
    {
        swap(a, b);
    }
    
    int temp;
    while (b != 0)
    {
        temp = a % b;
        a = b;
        b = temp;
    }

    return a;
}

int main() 
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    int a, b;
    int c, d;
    cin >> a >> b >> c >> d;

    int denominator = b * d;
    int numerator = a * d + b * c;

    int divisor = gcd(numerator, denominator);

    cout << numerator / divisor << " " << denominator / divisor;

    return 0;
}