标签:公约数 最简 整数 iostream gcd names nbsp bsp mes
描述
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。
分子和分母均不为0,也不为负数。
输入第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。输出输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。样例输入
2 1/2 1/3
样例输出
5/6
#include <iostream> using namespace std; int main() { int t; cin >> t; int sumn = 0, sumd = 1; // 储存结果,sumn/sumd while (t--) { int num, deno; char slash; //专门用来吃掉/的 cin >> num >> slash >> deno; // 先相加 a/b + c/d = (a*d+c*b)/(b*d) sumn = sumn*deno + num*sumd; sumd = sumd*deno; } //后约分 //先求最大公约数gcd,这里用的是欧几里得法 int m = sumd , n = sumn, r; r = m % n; while (r != 0) { m = n; n = r; r = m % n; } int gcd = n; //分子分母同时除以gcd就可以完成约分 sumd /= gcd; sumn /= gcd; if (sumd > 1) cout << sumn << ‘/‘ << sumd << endl; else cout << sumn << endl; return 0; }
标签:公约数 最简 整数 iostream gcd names nbsp bsp mes
原文地址:http://www.cnblogs.com/Zhz0306/p/7666896.html