PAT Team Practice 009
问题描述
本题的要求很简单,就是求N个数字的和。
麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。
输入格式
输入第一行给出一个正整数N(≤100)。
随后一行按格式a1/b1 a2/b2 ...给出N个有理数。
题目保证所有分子和分母都在长整型范围内。
另外,负数的符号一定会出现在分子前面。
输出格式
输出上述数字和的最简形式——即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。
如果结果的整数部分为0,则只输出分数部分。
代码程序
#include <stdio.h> long long gcd(long long a, long long b) { if(a == 0) return 0; else return (b == 0) ? a : gcd(b, a % b); } int main() { int N; long long a,b,c,d,lcp; int i = 1; scanf("%d", &N); scanf("%lld/%lld", &a, &b); int t0 = gcd(a, b); if(a) { a /= t0; b /= t0; } while(i<N) { scanf("%lld/%lld", &c, &d); lcp = b / gcd(b,d) * d; a = a * lcp / b + c * lcp / d; b = lcp; int t0 = gcd(a,b); if(t0 != 0) { a = a / t0; b = b / t0; } i++; } if(a && a/b == 0) printf("%lld/%lld\n", a%b, b); else if(a%b == 0) printf("%lld\n", a/b); else printf("%lld %lld/%lld\n", a/b, a%b, b); return 0; }
执行结果
输入样例
5 2/5 4/15 1/30 -2/60 8/3
输出样例
3 1/3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?