#include <iostream>
#include <cassert>
#
using namespace std;
void Add( int num1, int den1, int num2, int den2, int & result_num, int & result_den)
{
int add_num, add_den;
result_den = lcm( den1, den2) ;
result_num = num1* den2 + den1* num2;
Reduction( result_num, result_den, add_num, add_den) ;
}
void Sub( int num1, int den1, int num2, int den2, int & result_num, int & result_den) {
int sub_num, sub_den;
result_den = lcm( den1, den2) ;
result_num = num1* den2 - den1* num2;
Reduction( result_num, result_den, sub_num, sub_den) ;
}
void Mpy( int num1, int den1, int num2, int den2, int & result_num, int & result_den) {
int mpy_num, mpy_den;
result_num = num1* num2;
result_den = den1* den2;
Reduction( result_num, result_den, mpy_num, mpy_den) ;
}
void Div( int num1, int den1, int num2, int den2, int result_num, int result_den) {
int div_num, div_den;
result_num = num1* den2;
result_den = num2* den1;
Reduction( result_num, result_den, div_num, div_den) ;
}
int lcm( int m, int n) {
int m1 = m / gcd( n, m) ; // 최소공배수 통분했을때 나오는 최대공약수 제외한 나머지 값
int n1 = n / gcd( n, m) ;
return gcd( n, m) * m1 * n1; // 최대 공약수 랑 통분했을 시 나오는 수들의 곱셈
}
int gcd( int n, int m) {
assert ( ( n > 0 ) && ( m > 0 ) ) ;
if ( n < m)
{
int temp = n;
n = m;
m = temp;
return gcd( n% m, n) ;
}
return gcd( n% m, m) ;
}
void Reduction( int num, int den, int & result_num, int & result_den) //reduction함수의 첫번째 두번째 인자는 사칙연산의 결과의 분자/분모이다.
{
gcd( num, den) ;
result_num = result_num / gcd( num, den) ;
result_den = result_den / gcd( num, den) ;
}
int main( )
{
int a, b, c, d;
assert ( ( b > 0 ) && ( d > 0 ) ) ;
int resultNum, resultDen;
cout << "분자/분모를 차례대로 입력하시오 :" ;
cin >> a >> b >> c >> d;
cout << "(" << a << "/" << b << ")+" << "(" << c << "/" << d << ")=" ;
Add( a, b, c, d, resultNum, resultDen) ;
cout << "(" << a << "/" << b << ")-" << "(" << c << "/" << d << ")=" ;
Sub( a, b, c, d, resultNum, resultDen) ;
cout << "(" << a << "/" << b << ")*" << "(" << c << "/" << d << ")=" ;
Mpy( a, b, c, d, resultNum, resultDen) ;
cout << "(" << a << "/" << b << ")/" << "(" << c << "/" << d << ")=" ;
Div( a, b, c, d, resultNum, resultDen) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KIwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgQWRkKGludCBudW0xLCBpbnQgZGVuMSwgaW50IG51bTIsIGludCBkZW4yLCBpbnQgJiByZXN1bHRfbnVtLCBpbnQgJiByZXN1bHRfZGVuKQp7CglpbnQgYWRkX251bSwgYWRkX2RlbjsKCXJlc3VsdF9kZW4gPSBsY20oZGVuMSwgZGVuMik7CglyZXN1bHRfbnVtID0gbnVtMSpkZW4yICsgZGVuMSpudW0yOwoJUmVkdWN0aW9uKHJlc3VsdF9udW0sIHJlc3VsdF9kZW4sIGFkZF9udW0sIGFkZF9kZW4pOwp9Cgp2b2lkIFN1YihpbnQgbnVtMSwgaW50IGRlbjEsIGludCBudW0yLCBpbnQgZGVuMiwgaW50JiByZXN1bHRfbnVtLCBpbnQmIHJlc3VsdF9kZW4pewoKCWludCBzdWJfbnVtLCBzdWJfZGVuOwoJcmVzdWx0X2RlbiA9IGxjbShkZW4xLCBkZW4yKTsKCXJlc3VsdF9udW0gPSBudW0xKmRlbjIgLSBkZW4xKm51bTI7CglSZWR1Y3Rpb24ocmVzdWx0X251bSwgcmVzdWx0X2Rlbiwgc3ViX251bSwgc3ViX2Rlbik7Cn0KCnZvaWQgTXB5KGludCBudW0xLCBpbnQgZGVuMSwgaW50IG51bTIsIGludCBkZW4yLCBpbnQmIHJlc3VsdF9udW0sIGludCYgcmVzdWx0X2Rlbil7CgkKCQoJaW50IG1weV9udW0sIG1weV9kZW47CglyZXN1bHRfbnVtID0gbnVtMSpudW0yOwoJcmVzdWx0X2RlbiA9IGRlbjEqZGVuMjsKCVJlZHVjdGlvbihyZXN1bHRfbnVtLCByZXN1bHRfZGVuLCBtcHlfbnVtLCBtcHlfZGVuKTsKfQoKdm9pZCBEaXYoaW50IG51bTEsIGludCBkZW4xLCBpbnQgbnVtMiwgaW50IGRlbjIsIGludCByZXN1bHRfbnVtLCBpbnQgcmVzdWx0X2Rlbil7CgkKCWludCBkaXZfbnVtLCBkaXZfZGVuOwoJcmVzdWx0X251bSA9IG51bTEqZGVuMjsKCXJlc3VsdF9kZW4gPSBudW0yKmRlbjE7CglSZWR1Y3Rpb24ocmVzdWx0X251bSwgcmVzdWx0X2RlbiwgZGl2X251bSwgZGl2X2Rlbik7Cn0KCmludCBsY20oaW50IG0sIGludCBuKXsKCgoJaW50IG0xID0gbSAvIGdjZChuLCBtKTsgIC8vIOy1nOyGjOqzteuwsOyImCDthrXrtoTtlojsnYTrlYwg64KY7Jik64qUIOy1nOuMgOqzteyVveyImCDsoJzsmbjtlZwg64KY66i47KeAIOqwkgoJaW50IG4xID0gbiAvIGdjZChuLCBtKTsKCglyZXR1cm4gZ2NkKG4sIG0pICogbTEgKiBuMTsgIC8vIOy1nOuMgCDqs7Xslb3siJgg656RIO2Gteu2hO2WiOydhCDsi5wg64KY7Jik64qUIOyImOuTpOydmCDqs7HshYgKfQoKaW50IGdjZChpbnQgbiwgaW50IG0pewoJCiAgICBhc3NlcnQoKG4gPiAwKSAmJiAobSA+IDApKTsKCWlmIChuIDwgbSkKCXsKCQlpbnQgdGVtcCA9IG47CgkJbiA9IG07CgkJbSA9IHRlbXA7CgoJCXJldHVybiBnY2QobiVtLCBuKTsKCX0KCglyZXR1cm4gZ2NkKG4lbSwgbSk7CgkKfQoKdm9pZCBSZWR1Y3Rpb24oaW50IG51bSwgaW50IGRlbiwgaW50JiByZXN1bHRfbnVtLCBpbnQmIHJlc3VsdF9kZW4pICAvL3JlZHVjdGlvbu2VqOyImOydmCDssqvrsojsp7gg65GQ67KI7Ke4IOyduOyekOuKlCDsgqzsuZnsl7DsgrDsnZgg6rKw6rO87J2YIOu2hOyekC/rtoTrqqjsnbTri6QuCnsKCWdjZChudW0sIGRlbik7CgoJcmVzdWx0X251bSA9IHJlc3VsdF9udW0gLyBnY2QobnVtLCBkZW4pOwoKCXJlc3VsdF9kZW4gPSByZXN1bHRfZGVuIC8gZ2NkKG51bSwgZGVuKTsKCn0KCmludCBtYWluKCkKewoJCglpbnQgYSwgYiwgYywgZDsKCWFzc2VydCgoYiA+IDApICYmIChkID4gMCkpOwoJaW50IHJlc3VsdE51bSwgcmVzdWx0RGVuOwoKCWNvdXQgPDwgIuu2hOyekC/rtoTrqqjrpbwg7LCo66GA64yA66GcIOyeheugpe2VmOyLnOyYpCA6IjsKCWNpbiA+PiBhID4+IGIgPj4gYyA+PiBkOwoKCgljb3V0IDw8ICIoIiA8PCBhIDw8ICIvIiA8PCBiIDw8ICIpKyIgPDwgIigiIDw8IGMgPDwgIi8iIDw8IGQgPDwgIik9IjsKCglBZGQoYSwgYiwgYywgZCwgcmVzdWx0TnVtLCByZXN1bHREZW4pOwoKCWNvdXQgPDwgIigiIDw8IGEgPDwgIi8iIDw8IGIgPDwgIiktIiA8PCAiKCIgPDwgYyA8PCAiLyIgPDwgZCA8PCAiKT0iOwoKCVN1YihhLCBiLCBjLCBkLCByZXN1bHROdW0sIHJlc3VsdERlbik7CgoJY291dCA8PCAiKCIgPDwgYSA8PCAiLyIgPDwgYiA8PCAiKSoiIDw8ICIoIiA8PCBjIDw8ICIvIiA8PCBkIDw8ICIpPSI7CgogICAgTXB5KGEsIGIsIGMsIGQsIHJlc3VsdE51bSwgcmVzdWx0RGVuKTsKCgljb3V0IDw8ICIoIiA8PCBhIDw8ICIvIiA8PCBiIDw8ICIpLyIgPDwgIigiIDw8IGMgPDwgIi8iIDw8IGQgPDwgIik9IjsKCiAgICBEaXYoYSwgYiwgYywgZCwgcmVzdWx0TnVtLCByZXN1bHREZW4pOwoKCglyZXR1cm4gMDsKfQo=
compilation info
prog.cpp: In function 'void Add(int, int, int, int, int&, int&)':
prog.cpp:10:29: error: 'lcm' was not declared in this scope
result_den = lcm(den1, den2);
^
prog.cpp:12:52: error: 'Reduction' was not declared in this scope
Reduction(result_num, result_den, add_num, add_den);
^
prog.cpp: In function 'void Sub(int, int, int, int, int&, int&)':
prog.cpp:18:29: error: 'lcm' was not declared in this scope
result_den = lcm(den1, den2);
^
prog.cpp:20:52: error: 'Reduction' was not declared in this scope
Reduction(result_num, result_den, sub_num, sub_den);
^
prog.cpp: In function 'void Mpy(int, int, int, int, int&, int&)':
prog.cpp:29:52: error: 'Reduction' was not declared in this scope
Reduction(result_num, result_den, mpy_num, mpy_den);
^
prog.cpp: In function 'void Div(int, int, int, int, int, int)':
prog.cpp:37:52: error: 'Reduction' was not declared in this scope
Reduction(result_num, result_den, div_num, div_den);
^
prog.cpp: In function 'int lcm(int, int)':
prog.cpp:43:23: error: 'gcd' was not declared in this scope
int m1 = m / gcd(n, m); // 최소공배수 통분했을때 나오는 최대공약수 제외한 나머지 값
^
stdout