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

分数求和

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

题目描述】

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


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

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

    分享给朋友:

    相关文章

    2021年市北区程序设计竞赛试题(初中组)

    2021年市北区程序设计竞赛试题(初中组)

    1.开关灯(light.cpp)【题目描述】某实验室共有n盏灯,灯的编号为1~n,每盏灯的初始状态是关闭的。现在有m位学生,每位学生可以前去抽取一张带数字的卡片,其数字为Ai,然后依次将自己手中的数字...

    【题解】团伙

    【题目描述】在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足:1、我朋友的朋友是我的朋友;2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个...

    【题解】最大配对

    题目描述      给出2个序列A={a[1],a[2],…,a[n]},B={b[1],b[2],…,b[n]},从A、B中各选出n个元素进行一一配对(可以不按照原来在...

    求Π的值

    【题目描述】根据公式:arctanx(x)=x−x^3/3+x^5/5−x^7/7+…和π=6arctanx(1/√3).定义函数arctanx(x),求当最后一项小于10^(−6)时π的值。【输入描...

    字符串移位包含问题

    【题目描述】对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串 s_1s1 和 s_2s2,要求判定其中一个字符串是...

    【题解】均分蛋糕

    【题目描述】小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个...