描述
小明有 n 个分数并想对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为 1;若最终结果的分母为 1,则直接用整数表示。
如:5/6、10/3 均是最简形式,而 3/6 需要化简为 1/2, 3/1 需要化简为 3。
分子和分母均不为 0,也不为负数。
输入
第一行是一个整数 n,表示分数个数,1 \le n \le 101⩽n⩽10;
接下来 n 行,每行一个分数,用 p/q的形式表示,不含空格,p,q 均不超过 10。
输出
输出只有一行,即最终结果的最简形式。若为分数,用p/q的形式表示。
输入样例
2 1/2 1/3
输出样例
5/6
这题主要考察最大公约数和最小公倍数的用法,注意可能要开long long
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
if(b==0){
return a;
}else{
return gcd(b,a%b);
}
}
int main() {
int n,fz=0,fm=1;
cin>>n;
int p,q,i;
char c;
for(i=1;i<=n;i++){
cin>>p>>c>>q;
fz=fz*q+p*fm;
fm=fm*q;
int t=gcd(fz,fm);
fz=fz/t;
fm=fm/t;
}
if(fm==1){
cout<<fz;
}else{
cout<<fz<<"/"<<fm;
}
return 0;
}
测试结果为AC,不喜勿喷。
禁止随意搬运