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,题得解。