描述
输入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 *p,*q;
char slash;
p = new int[n];
q = new int[n];
for(int i=0; i<n; i++){
cin >> p[i] >> slash >> q[i];
}
// 求俩数的分母的最小公倍数
for (int i= 0; i<n-1; i++){int a = q[i];
int b = q[i+1];
int c = 0;
while (a!=0){
c = a;
a = b % a;
b = c;
}
// 求分子和分母的最大公约数
int tem1 = q[i] / ccc;
int tem2 = q[i+1] / ccc;
int mcc = tem1 * tem2 * ccc;
int temn = p[i]*tem2 + p[i+1]*tem1;
int aa = mcc, bb=temn, cc;
while(aa!=0){
cc = aa;
aa = bb%aa;
bb = cc;
}
int gcd = bb;
mcc /= gcd;
temn /= gcd;
p[i+1] = temn;
q[i+1] = mcc;
}
int sumn = p[n-1];
int sumd = q[n-1];
if (sumd > 1)
cout << sumn << '/' << sumd << endl;
else
cout << sumn << endl;
return 0;
}