分数求和

Posted 平行线不会相交

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分数求和相关的知识,希望对你有一定的参考价值。

描述

输入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;
} 

 

以上是关于分数求和的主要内容,如果未能解决你的问题,请参考以下文章

分数求和

分数求和

有规律分数求和!

关于N个有理分数求和的分析(c语言)

以下代码片段的算法复杂度

L1-9 N个数求和