문제
풀이
유클리드 호제법
간단한 유클리드 호제법 문제이다. 아래는 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;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준][C++] 2485: 가로수 (0) | 2024.01.18 |
---|---|
[백준][C++] 3036: 링 (0) | 2024.01.15 |
[백준][C++] 14891: 톱니바퀴 (0) | 2024.01.11 |
[백준][C++] 16235: 인구 이동 (1) | 2024.01.10 |
[백준][C++] 14499: 주사위 굴리기 (1) | 2024.01.09 |