N个数求和

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:
输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:
5
2/5 4/15 1/30 -2/60 8/3

输出样例1:
3 1/3

输入样例2:
2
4/3 2/3

输出样例2:
2

输入样例3:
3
1/3 -1/6 1/8

输出样例3:
7/24

此题主要考查递归求解最大公约数,然后最小公倍数 = 两数相乘 / 最大公约数。

简单举个例子熟悉一下

#include<iostream>
using namespace std;
long  gcd(long a,long b)
{//求最大公约数 return a % b == 0 ? b : gcd(b, a % b);
}
int main()
{int a, b;cin >> a >> b;cout << "最大公约数: " << gcd(a, b) << endl;cout << "最小公倍数:" << (a * b) / gcd(a, b) << endl;
}

然后这个题有以下几点需要注意:

  1. s1 存分子之和,s2更新最小公倍数,通分求解分子的和 s1 += s2 / deno[i] * num[i];
  2. 输出时注意负数情况
  3. 如果有余数 要化简分子/ 分母,化简就是分子分母同时除以分子和分母的最大公约数。
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)
{//求两个数的最大公约数 return a % b == 0 ? b : gcd(b, a % b);
}int main()
{int n;scanf("%d", &n);ll num[105], deno[105]; //分子和分母 ll s1 = 0, s2 = 0;///s1表示通分后分子之和,s2表示当前最小公倍数for(int i = 0; i < n; i ++ ){scanf("%lld/%lld", &num[i], &deno[i]);}s2 = deno[0];//初始最小公倍数for(int i = 1; i < n; i ++ )//从下一个数的分母开始 {//求最小公倍数s2s2 = s2 * deno[i] / gcd(s2, deno[i]);//最小公倍数 = 两数乘积 / 最大公约数 } for(int i = 0; i < n; i ++ ){//求出通分后所有分子之和s1s1 += s2 / deno[i] *  num[i];} ll integer = s1 / s2;//整数 = 分子之和 / 最小公倍数ll mode = abs(s1 % s2); //余数if(mode == 0){//没有余数 cout << integer << endl;}else{//整数不为0输出整数,为0直接输出分数 if(integer != 0) cout << integer << " ";if(s1 < 0 ) cout << "-"; //化简分子分母:分子分母同除以最大公约数 cout <<  mode / gcd(s2, mode) << "/" << s2 / gcd(s2, mode); } return 0;
}

L1-009 N个数求和 (20分)(分数求和)相关推荐

  1. 关于团体程序设计天梯赛-练习集 L1-009 N个数求和 (20 分) 以及测试点三过不了的一些想法

    本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(≤100).随后一行按格式a1/b1 ...

  2. 7-9 N个数求和 (20 分)

    7-9 N个数求和 (20 分) 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(≤ ...

  3. N个数求和 (20 分)

    N个数求和 (20 分) 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(≤100) ...

  4. 实验4-1-5 统计素数并求和 (20 分)

    实验4-1-5 统计素数并求和 (20 分) 本题要求统计给定整数M和N区间内素数的个数并对它们求和. 输入格式: 输入在一行中给出两个正整数M和N(1≤M≤N≤500). 输出格式: 在一行中顺序输 ...

  5. 实验4-1-7 特殊a串数列求和 (20 分)

    实验4-1-7 特殊a串数列求和 (20 分) 给定两个均不超过9的正整数a和n,要求编写程序求a+a**a+aaa++⋯+a**a⋯a(n个a)之和. 输入格式: 输入在一行中给出不超过9的正整数a ...

  6. 1002 写出这个数 (20 分)

    1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1 ...

  7. PTA 7-9 叶节点求和 (20 分)

    PTA 7-9 叶节点求和 (20 分) 对给定的有N个节点(N>=0)的二叉树,求叶节点元素之和 没有当过父节点的节点都是叶子节点 #include <iostream> #inc ...

  8. 1081 Rational Sum (20 分) 分数加法 简单模拟

    1081 Rational Sum (20 分) Given N rational numbers in the form numerator/denominator, you are suppose ...

  9. 统计素数并求和 (20 分)本题要求统计给定整数M和N区间内素数的个数并对它们求和。

    本题要求统计给定整数M和N区间内素数的个数并对它们求和. 输入格式: 输入在一行中给出两个正整数M和N(1≤M≤N≤500). 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以 ...

最新文章

  1. 艾媒报告丨2017年全球移动社交市场研究报告
  2. CAP 理论 —— 最通俗的解释
  3. 软件接口测试 (1)
  4. [瞎搞]JZOJ 3096 Hash函数
  5. Redis分布式锁及分区
  6. 苹果Mac记事本中快速计算应用:Soulver
  7. java 线程池扩容_106. 生产环境中的线程池自动扩容与缩容的动态资源分配经验...
  8. 计算机网络基础知识框架
  9. 一条双字长的取数指令(LDA)存于存储器的100和101单元,其中第一个字为操作码和寻址特征M,第二个字为形式地址。
  10. 租房软件需要的是简单易用
  11. PowerShell yarn : 无法加载文件 C:\Users\Admin\AppData\Roaming\npm\yarn.ps1,因为在此系统因为在此系统上禁止运行脚本。
  12. 王者荣耀关注显示服务器忙,王者荣耀不满足参加该活动的条件 访问繁忙解决方法...
  13. Oracle那些年那些事儿
  14. 电商秒杀系统设计分析
  15. 同步手机QQ或微信消息到电脑端,需要时导入历史聊天记录
  16. 怎么创建网页?有几种方法
  17. Leetcode刷题100天—706. 设计哈希映射(哈希表)—day74
  18. Vue原生图片瀑布流
  19. html标签手册 360doc,360doc网文摘手
  20. 虚拟化技术可以将一台物理服务器虚拟成,服务器虚拟化技术在实验室中的应用...

热门文章

  1. Zotero使用TIPS
  2. React:安装配置使用scss
  3. python内置函数返回元素个数_python内置函数列表(list)
  4. vw8000_汽车电子国际测试标准iso16750和VW8000
  5. js实现3D旋转相册
  6. (优化解决)低时间解决偶位回文
  7. FDC2214/2114使用说明及资料分享
  8. 10分钟部署一个别人可以访问的在线网站
  9. sql实现查询学习了所有课程的学生信息
  10. kaggle平台介绍