【每周一题】2017.3.27 HDU2503 解题报告

题目描述

• 给你2个分数,求他们的和,并要求和为最简形式。

• 这道题着重考察的是递归算法,另外还附赠了一个GCD算法,你能做出来吗?

可以把代码提交至这里:http://acm.hdu.edu.cn/showproblem.php?pid=2503


解题分析

这次的题目就不再详解了,GCD就是求最大公约数的算法,其实就可以直接用高中学习的“辗转相除法”来求得;

用辗转相除法确定两个正整数 a 和 b(a≥b) 的最大公因数gcd(a,b):

当a mod b=0 时gcd(a,b)=b,否则

gcd(a,b) = gcd(b,a mod b)

是不是很简单,那就不废话了,直接上代码。

例程(C++)

(注:例程只是给出一种解题方法,不是标准程序,也不一定是最完美的解法)

#include
using namespace std;
int Gcd(int x, int y);
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int a, b, c, d;
cin >> a >> b >> c >> d;
int son = a * d + b * c;
int mum = b * d;
int temp = Gcd(son, mum);
if (temp == 0) {
cout << temp << " " << 1 << endl;
}
else {
cout << son / temp << " " << mum / temp << endl;
}
}
system("pause");
return 0;
}
int Gcd(int x, int y)
{
if (x % y == 0) {
return y;
}
else {
return Gcd(y, x % y);
}
}

你可能感兴趣的:(【每周一题】2017.3.27 HDU2503 解题报告)