描述
輸入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;
}