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

멋진감자·어제
1

알고리즘

목록 보기
18/20
post-thumbnail

문제

분모와 분자가 모두 자연수인 두 개의 분수가 주어질 때,
두 분수의 합을 기약분수의 형태로 출력하는 문제다.

풀이

기약분수는 분자와 분모를 두 수의 최대공약수로 나누어 얻을 수 있다.
미래엔 수학 교과서 개발할 때 나왔던 개념이라 기억하고 있나보다.
사실 그게 아니라도 알고 있어야 할테지만 넘어가자

분모의 합은 크로스로 잘 곱해서 구해주고,
gcd 함수로 구한 최대공약수를 나눈 각 분자와 분모를 출력하면 된다.

코드

#include <iostream>
using namespace std;

int gcd(int a, int b) {
	if (b == 0) return a;
	else return gcd(b, a % b);
}

int main() {
	// numerator, denominator
	int an, ad, bn, bd;
	cin >> an >> ad >> bn >> bd;

	int cn = an * bd + bn * ad;
	int cd = ad * bd;

	int g = gcd(cn, cd);
	
	cout << cn / g << " " << cd / g;
}
profile
난멋져

0개의 댓글