“21天好习惯”第一期—16

Problem Description

w学长是数学奇才,他轻轻松松就学会了高数,但是他却忘记了基础数学。
已知两个分数a/b,c/d;请问两个分数的和是什么。
w学长不会,你能告诉他吗?答案保留最简分数形式。

Input

多组输入,处理到文件结尾,每行四个整数a,b,c,d(0<a,b,c,d<1e9),表示两个分数a/b,c/d。

Output

输出两个整数代表答案,末行换行。

Sample Input

1 2 1 3
1 2 1 2

Sample Output

5 6
1 1

Author

xtyyds


#include <stdio.h> int gcd ( int x , int y ){ if ( y == 0 ) return x ; else return gcd ( y , x % y ); } int main (){ int a , b , c , d ; while ( scanf ( "%d%d%d%d" , & a , & b , & c , & d ) != EOF ){ int den = b * d ; int mol = a * d + b * c ; printf ( "%d %d\n" , mol / gcd ( den , mol ), den / gcd ( den , mol )); } return 0 ; } 这道题需要用到一个算法,那就是欧几 里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数, 它是已知最古老的算法,使用时需要将算法简化,可以利用递归函数实现。然后分子相加时ab+cd,分母是ad,题得解。
上一篇:爱你一生一世


下一篇:求最大公约数伪代码