【题目描述】

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:$5 \over 6 $、$10 \over 3$ 均是最简形式,而$3 \over 6$需要化简为$1 \over 2$,$3 \over 1$需要化简为3。分子和分母均不为0,也不为负数。

【输入描述】

第一行是一个整数n,表示分数个数,1≤n≤10;
接下来nn行,每行一个分数,用”p/q”的形式表示,不含空格,p,q,均不超过10。

【输出描述】

输出只有一行,即最终结果的最简形式。若为分数,用”p/q”的形式表示。

【样例输入】

2
1/2
1/3

【样例输出】

5/6

【分析】

(1)有一个求最大公约数的函数来化简分数
(2)分子和分母要有通分的过程
(3)注意特殊条件 ,类似 $3 \over 1$ 只能写成3,不能写成3/1


【参考代码 1】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define N 1000010
using namespace std;
int a[20],b[20];
//求最大公约数的函数 
int gcd(int a,int b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
int main()
{
    int n;
    int cnt=0;
    int fenzi=0,fenmu=1;  //用fenzi表示最终的分子,fenmu表示分母,注意分母不能为0 
    int divisor=0;  //最大公约数 
    char s[20];
 
    cin>>n;
    while(n--)
    {
        scanf("%d/%d",&a[cnt],&b[cnt]);  //把n个数读入数组,a是表示分子,b是表示分母 
        cnt++;
    }
    for(int i=0;i<cnt;i++)
        fenmu*=b[i];   //通分的过程 
    for(int i=0;i<cnt;i++)
        fenzi=fenzi+fenmu*a[i]/b[i];  //计算分子和的过程 
 
    divisor=gcd(fenmu,fenzi);//计算分子分母的最大公约数 
    fenmu/=divisor;
    fenzi/=divisor;
 
    if(fenmu==1)
        cout<<fenzi<<endl;
    else
        cout<<fenzi<<"/"<<fenmu<<endl;
    return 0;
}

返回目录:题解目录