(8)分數求和

描述

輸入n個分數並對他們求和,用約分之後的最簡形式表示。

比如:

q/p = x1/y1 + x2/y2 +….+ xn/yn,

q/p要求是歸約之後的形式。

如:5/6已經是最簡形式,3/6需要規約爲1/2, 3/1需要規約成3,10/3就是最簡形式。

PS:分子和分母都沒有爲0的情況,也沒有出現負數的情況

輸入

第一行的輸入n,代表一共有幾個分數需要求和

接下來的n行是分數

輸出

輸出只有一行,即歸約後的結果

這裏寫圖片描述

很簡單,也很容易理解。
巧妙的是求最大公約數的部分

#include<iostream>
using namespace std;

int main(){

    int n;
    cin >> n;
    int sumn = 0; int sumd = 1;//分別存儲分子和分母 sumn/sumd
    while (n--){
        int num, deno;
        char slash;//輸入/的
        cin >> num >> slash >> deno;

        //先相加 a/b+c/d =(a*d+b*c)/(b*d)
        sumn = sumn*deno + num*sumd;
        sumd = sumd*deno;
    }
    //後約分
    //先求最大公約數gcd,這裏用的是歐幾里得法
    int a = sumd, b = sumn, c;
    while (a != 0){
        c = a;
        a = b%a; 
        b = c;
    }
    int gcd = b;
    //分子分母同時除以gcb約分
    sumd = sumd / gcd;
    sumn = sumn / gcd;

    if (sumd > 1)
        cout << sumn << "/" << sumd << endl;
    else
        cout << sumn << endl;

    system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章