PAT L1-009. 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
最后结果有多种情况,1.分子/分母 == 0,这里有两种情况,a.分子为0(最后一个测试点) , b.是个分数,直接输出
2.分子/分母 != 0 这里有两种情况, a.是个整数,输出整数 b.输出 “整数 分数形式”
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; long gcd(long a, long b){
if(a < b)
swap(a,b);
if(b == )
return a;
else
return gcd(b, a % b);
} long lcm(long a, long b){
return a / gcd(a, b) * b;
} int main(){
long t,a1, b1, ans1 = , ans2 = , gcd1, lcm1;
cin >> t;
scanf("%ld/%ld", &a1, &b1);
ans1 = a1, ans2 = b1; gcd1 = gcd(abs(ans1), ans2);
ans1 = ans1 / gcd1;
ans2 = ans2 / gcd1; while(--t){
scanf("%ld/%ld", &a1, &b1); gcd1 = gcd(b1, abs(a1));
a1 = a1 / gcd1;
b1 = b1 / gcd1; lcm1 = lcm(b1, ans2);
ans1 = lcm1 / ans2 * ans1 + lcm1 / b1 * a1;
ans2 = lcm1; gcd1 = gcd(abs(ans1), ans2);
ans1 = ans1 / gcd1;
ans2 = ans2 / gcd1;
} if( ans1 / ans2 == ) {
if(ans1 == )
printf("0\n");
else printf("%ld/%ld", ans1, ans2);
} else {
if(abs(ans1) % abs(ans2) == )
printf("%ld", ans1 / ans2);
else{
long a = ans1 / ans2;
long b = ans1 - a * ans2;
printf("%ld %ld/%ld", a, b, ans2);
}
} return ; }
PAT L1-009. N个数求和的更多相关文章
- 团体程序设计天梯赛-练习集L1-009. *N个数求和
L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题的要求很简单,就是求N个数字的和.麻烦的是,这些 ...
- #020PAT 没整明白的题L1-009 N个数求和 (20 分)
后面的测试点过不去,两个错误一个超时. 目前未解决 L1-009 N个数求和 (20 分) 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和 ...
- 暴力+辗转相除法——N个数求和
题目来源 PTA 团体程序设计天梯赛-练习集 L1-009 N个数求和 (20分) https://pintia.cn/problem-sets/994805046380707840/problems ...
- PAT 天梯赛 L1-009 N个数求和
模拟题 题目链接 题解 每次将两个分数进行相加,到最后再将结果化成带分数.主要考察的最大公约数与最小公倍数. 代码如下: #include<cstdio> #include<cstd ...
- PAT L1-009 N个数求和(模拟分数加法)
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...
- PAT L1-009 N个数求和(运用GCD进行通分)
题目链接:https://www.patest.cn/contests/gplt/L1-009 题目: 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你 ...
- PAT 天梯赛 L1-009. N个数求和 【模拟】
题目链接 https://www.patest.cn/contests/gplt/L1-009 思路 每一步每一步 往上加,但是要考虑 溢出,所以用 LONG LONG 而且 每一步 都要约分 才能保 ...
- Java:多个数求和
设计思想: 先定义int n,定义输入数的个数,输入一个新建的动态数组,输入数字存入动态数组中,函数转换并求和,最后输出. 程序流程图: 源程序代码: package com; import java ...
- 天梯赛 L1-009 N个数求和 (模拟)
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=1 ...
随机推荐
- Html——footer的使用
html部分 <div class="container"> <div class="body"></div> <di ...
- ruby2.2.2在msvc2010上编译
ruby2.2.2在msvc2010上编译有些问题,主要是msvc2010不支持c99,ruby有些扩展源代码例如ffi.c局部变量没有在block的起始位置定义,导致编译器报错. 办法 1.用支持c ...
- 【转】VC中对文件的读写
原文网址:http://www.cnblogs.com/LJWJL/archive/2012/10/06/2712466.html 注意: 1.由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2 ...
- Android 开发性能优化之SparseArray(一)
多数Android开发者都知道在Android中可以使用HashMap来映射一种对应关系,在java开发中HashMap也算是一种很重要的数据存储结构.然后很多人在Android开发中多数都会用Has ...
- 如何解决CHM打开乱码的问题
1. 问题 经常碰到一些 CHM 格式的帮助文档出现乱码无法阅读的情况,而且 CHM 文档不像浏览器一样,右键可以选择字符编码,非常不便.究其原因,主要就是 CHM 文档在页面中没有指定合适的字符编码 ...
- 【VLFeat】使用matlab版本计算HOG
下载 vlfeat-0.9.18 http://www.vlfeat.org cd D:\program\vlfeat-0.9.18\toolbox
- 【原】Spark数据本地性
Spark数据本地性 分布式计算系统的精粹在于移动计算而非移动数据,但是在实际的计算过程中,总存在着移动数据的情况,除非是在集群的所有节点上都保存数据的副本.移动数据,将数据从一个节点移动到另一个节点 ...
- leecode single numer
http://www.acmerblog.com/leetcode-single-number-ii-5394.html acm之家的讲解总是那么到位 public class Solution { ...
- noip 2014 子矩阵
先枚举行再DP列.好题,详见代码 #include <cstdio> #include <cstring> #include <cstdlib> #include ...
- 微软Build2014大会干货总结-2
继昨天微软在Build2014大会上宣布一系列重磅举措后,第二天的主题是微软云(Microsoft Azure)及开发者战略,CSDN记者继续从旧金山现场给您发来一线报道. 第二天的主角是新上任的微软 ...