分数求和
问题描述
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:5/6、10/3均是最简形式,而3/6需要化简为1/2。
分子和分母均不为0 ,也不为负数。
输入格式
第一行是一个整数
n,表示分数个数, 1≤n≤10 ;接下来n 行,每行一个分数,用p/q 的形式表示,不含空格p,q 均不超过10。
输出格式
输出只有一行,即最终结果的最简形式。若为分数,用 p/q 的形式表示。
【代码】
#include<bits/stdc++.h>
using namespace std;
struct t{
int x;
int y;
}a[100];
int main(){
int n; cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i].x >> a[i].y;
}
int hc = a[1].x, xl = a[1].y;
for(int i = 2; i <= n; i++){
int sum = xl*a[i].y/__gcd(xl, a[i].y);
hc = hc*sum/xl+a[i].x*sum/a[i].y;
xl = sum;
}
if(hc%xl == 0) cout << hc/xl;
else cout << hc/__gcd(hc,xl) << '/' << xl/__gcd(hc,xl);
return 0;
}
问: 哪位大佬告诉我怎么RE了……