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

分数求和

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

题目描述】

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


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

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

分享给朋友:

相关文章

【题解】周末舞会

【题目描述】假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等...

进制转换(1)

【题目描述】毛毛是个健忘的孩子,编程课上老师刚讲过进制转换的问题,她又忘了。请你帮他编写一个程序,完成一个浮点数与二进制之间的相互转换【输入描述】两个数字,第一个数字表示要转换的数字,浮点型。第二个是...

【题解】取余(2019青岛市程序设计竞赛)

【问题描述】给你n个正整数a1,a2,..,an。求(a1*a2*..an)%10007的值。【输入】第一行,n,表示整数的个数。第二行,n个用空格隔开的正整数。【输出】一个整数,(a1*a2*..a...

【题解】连通块

【题目描述】一个n × m的方格图,一些格子被涂成了黑色,在方格图中被标为1,白色格子标为0。问有多少个四连通的黑色格子连通块。四连通的黑色格子连通块指的是一片由黑色格子组成的区域,其中的每个黑色格子...

【题解】最少操作使数组递增

【题目描述】给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。比方说,如果 nums = [...

【题解】剔除相关数

【题目描述】一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。【输入描述】每组数据前有一个N(<10...