当前位置:首页 > 题解目录 > 正文内容

分数求和

亿万年的星光5年前 (2021-01-28)题解目录2635

题目描述】

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如: 5/6  、 10/3  均是最简形式,而3/6要化简为1/2, 3/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)注意特殊条件 ,类似 31 只能写成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;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】车厢调度

    【题解】车厢调度

    【题目描述】有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合。假设从A方向驶来的火车有n节(n<=1000)。分别按照顺序编号为1,2,3,...n。假定在...

    【题解】最小新整数

    4.最小新整数(smallest.cpp)【题目描述】假如:有一个十进制正整数n,每个数位上数字均不为0,并且0<n<1000000000。n的位数为m。先在从m位中删除k位(0<k...

    【题解】画百钱买百鸡

    【题目描述】鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、鸡母、鸡雏各几何?#include<iostream> using namespace ...

    【题解】摘花生问题

    【题解】摘花生问题

    【题目描述】Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过...

    【题解】循环比赛日程表

    【题目描述】设有N个选手进行循环比赛,其中 N=2^M ,要求每名选手要与其他的N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。【输入描述】输入M【输出描述】一...

    【题解】阶乘的末尾

    【题目描述】n的阶乘定义为n!=1*2*3*……*n  如3!=6   n!通常最后会有很多0,如5!=120  最后有一个0,现在统计n!去除末尾的0后,最后k位是多少...