博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT 天梯赛 L1-009 N个数求和
阅读量:4451 次
发布时间:2019-06-07

本文共 1395 字,大约阅读时间需要 4 分钟。

模拟题

题解

每次将两个分数进行相加,到最后再将结果化成带分数。主要考察的最大公约数与最小公倍数。

代码如下:

#include
#include
#include
#include
using namespace std;const int maxn = 110;int n;struct Fraction { long long a,b;}f[maxn];long long _gcd(long long a, long long b) { if(b == 0) return a; else return _gcd(b, a%b);}long long _lcm(long long a, long long b) { long long c = _gcd(a,b); return a/c*b;}Fraction _add(Fraction A, Fraction B) { long long lcm = _lcm(A.b, B.b); A.a = (lcm/A.b)*A.a; B.a = (lcm/B.b)*B.a; A.a += B.a; A.b = lcm; long long gcd = _gcd(abs(A.a), A.b); A.a /= gcd; A.b /= gcd; return A;}void _output(Fraction ans) { long long gcd,x; gcd = _gcd(abs(ans.a), ans.b); ans.a /= gcd; ans.b /= gcd; x = ans.a / ans.b; ans.a %= ans.b; if(x == 0 && ans.a == 0)printf("0\n"); else if(x && ans.a == 0) { printf("%lld\n", x); }else if(x == 0 && ans.a) { printf("%lld/%lld\n", ans.a, ans.b); }else { printf("%lld %lld/%lld\n", x, ans.a, ans.b); }}int main() { while(~scanf("%d", &n)) { Fraction ans; scanf("%lld/%lld", &ans.a, &ans.b); for(int i = 1; i < n; i++) { scanf("%lld/%lld", &f[i].a, &f[i].b); ans = _add(ans, f[i]); } _output(ans); } return 0;}

转载于:https://www.cnblogs.com/yinzm/p/5498516.html

你可能感兴趣的文章
[转载]js常用函数说明
查看>>
第十四届华中科技大学程序设计竞赛 K--Walking in the Forest
查看>>
饭统网倒闭:不创新、不放权就是作死 . 分类: 项目管理 ...
查看>>
DirectX:函数可以连接任意两个filter 分类: Direct...
查看>>
Android APP开发入门教程-Button 分类: JAVA ...
查看>>
WustOJ 1575 Gingers and Mints(快速幂 + dfs )
查看>>
Java50道经典习题-程序31 数组逆序
查看>>
5.28 考试修改+总结
查看>>
oracle 数据库事务,提交,回滚,保存点,表的锁定,隐式锁,显示锁,写锁,读锁,排他锁,共享锁...
查看>>
vscode同步设置&扩展插件
查看>>
tomcat部署web项目的方式 转
查看>>
js中,for循环里面放ajax,ajax访问不到变量以及每次循环获取不到数据问题总结...
查看>>
算法:求从1到n这n个整数的十进制表示中1出现的次数-- python 实现
查看>>
CSU 1160 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示
查看>>
LintCode 58: Compare Strings
查看>>
[Unity插件]Lua行为树(五):装饰节点Repeater
查看>>
限制.svn 访问
查看>>
从lca到树链剖分 bestcoder round#45 1003
查看>>
顺序表、链表、栈和队列
查看>>
Linux第二天(Linux常用命令2)
查看>>