解题思路:
(1)要求n个分数相加的最简结果,那么必须要求出最后的分母和分子的最大公约数,进行化简
(2)为了避免将n个分数直接相加数据过大的情况,可以使用每次输入一个分数,便累加化简的方法
(3)定义变量fz,fm用来存结果的分子和分母,a和b用来表示新输入的分子和分母,可以使用同分的方法求出两个分数的和
fz=fz*b+fm*a;//计算分子
fm=fm*b;//同分分母
(4)然后设置一个gcd函数(辗转相除法)用来求分子和分母的最大公约数 num,进行约分输出
(5)最后输出的时候,一定要注意特判,当分母为1的时候,直接输出分子
#include<bits/stdc++.h>
using namespace std;
int a,b;
int fz,fm;
int gcd(int xx,int yy)//递归求解最大公约数
{
if(xx%yy==0)
return yy;
else
return gcd(yy,xx%yy);
}
void f(int x,int y)
{
fz=fz*y+fm*x;//计算分子
fm=fm*y;//计算分母
int num=gcd(fz,fm);//num为分子分母的最大公约数
fz=fz/num;//化简分子
fm=fm/num; //化简分母
}
int main()
{
int n;
char ans;
cin>>n;
cin>>fz>>ans>>fm;//将第一个分数输入
for(int i=1;i<=n-1;i++)//输入剩余的n-1个分数
{
cin>>a>>ans>>b;
f(a,b);//进行化简
}
if(fm==1)//特判,如果分母为1的话
cout<<fz;//直接输出分子
else
cout<<fz<<ans<<fm;//否则输出正确形式
return 0;
}