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

分数求和

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

题目描述】

输入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;
}


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

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

    分享给朋友:

    相关文章

    【题解】合根植物

    【题解】合根植物

    【题目描述】w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成...

    【题解】发工资

    【题目描述】作为程序猿,最盼望的日子就是每月的9号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小李最近就在考虑一个问题:如果每...

    【题解】尼科彻斯定理

    【题目描述】 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。【输入描述】任一正整数【输出描述】该数的立方分解为一串连续奇数的和【样例输入】13【样例输出】13*13*...

    【题解】区间合并

    【题目描述】给定n个闭区间[ai,bi],其中i=1,2,...n。任意两个相邻或相交或相邻的闭区间可以合并为一个闭区间。例如,[1,2]和[2,3]可以合并为[1,3]。[1,3]和[2,4]可以合...

    【题解】泥泞路(2019青岛市程序设计竞赛)

    【题目描述】大雨过后,从小A的农场到镇上的公路上有一些泥泞路段,为了方便出行,他决定将若干块长度为L的木板可以铺在这些泥泞路段上,问他至少需要多少块木板,才能将所有的泥泞路段覆盖住。【输入】第一行为正...

    【题解】2001-T1 数的计数

    【题目描述】我们要求找出具有下列性质数的个数(包含输入的自然数nn):先输入一个自然数n(n≤1000)n(n≤1000),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个...