描述
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。
分子和分母均不为0,也不为负数。
输入
第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用”p/q”的形式表示,不含空格,p,q均不超过10。
输出
输出只有一行,即最终结果的最简形式。若为分数,用”p/q”的形式表示。
样例输入
2
1/2
1/3
样例输出
5/6
代码实现
#include<iostream>
using namespace std;
int main(void){
int n;
cin>>n;
int sumn=0,sumd=1;//储存结果,sumn/sumd
while(n--){
int num,deno;
char slash;//专门用来吃掉/
cin>>num>>slash>>deno;
//先相加a/b+c/d=(a*d+c*b)/(b*d)
sumn=sumn*deno+num*sumd;
sumd=sumd*deno;
}
//后约分
//先求最大公约数gcd,这里用的是欧几里得法
int a=sumd<sumn?sumd:sumn,b=sumd>sumn?sumd:sumn,c;
while(a!=0){
c=a;
a=b%a;
b=c;
}
int gcd=b;
//分子分母同时除以gdc就可以完成约分
sumd/=gcd;
sumn/=gcd;
if(sumd>1){
cout<<sumn<<'/'<<sumd<<endl;
}
else{
cout<<sumn<<endl;
}
return 0;
}