OpenJudge计算概论-分数求和
/*====================================================== 1006:分数求和 总时间限制: 1000ms 内存限制: 65536kB 描述 输入n个分数并对他们求和,用约分之后的最简形式表示。 比如: q/p = x1/y1 + x2/y2 +....+ xn/yn, q/p要求是归约之后的形式。 如:5/6已经是最简形式,3/6需要规约为1/2, 3/1需要规约成3,10/3就是最简形式。 PS:分子和分母都没有为0的情况,也没有出现负数的情况 输入 第一行的输入n,代表一共有几个分数需要求和 接下来的n行是分数 输出 输出只有一行,即归约后的结果 样例输入 2 1/2 1/3 样例输出 5/6 解析:这个题呢,主要是要注意最后输出时分母可能是1. 另外,这里保证了输入的分子和分母都没有0和负数,所以处理简单化了。 ========================================================*/ #include<stdio.h> struct fraction { int a,b;//分数a/b的分子和分母 }; int Gcd(int a,int b);//返回a和b的最大公约数 int Lcm(int a,int b);//返回a和b的最小公倍数 int main() { int n,i,d; struct fraction f1,f2; char c; //freopen("3.in","r",stdin); scanf("%d",&n); scanf("%d%c%d",&f2.a,&c,&f2.b); d=Gcd(f2.a,f2.b); if(d>1) { f2.a=f2.a/d; f2.b=f2.b/d; } for(i=2;i<=n;i++) { scanf("%d%c%d",&f1.a,&c,&f1.b); d=Lcm(f2.b,f1.b); f2.a=f2.a*d/f2.b+f1.a*d/f1.b; f2.b=d; d=Gcd(f2.a,f2.b); if(d>1) { f2.a=f2.a/d; f2.b=f2.b/d; } } if(f2.b>1) printf("%d/%d\n",f2.a,f2.b); else printf("%d\n",f2.a); return 0; } int Gcd(int a,int b) { int c; if(a<=0||b<=0) return -1; if(a<b) { c=a; a=b; b=c; } c=a%b; while(c!=0) { a=b; b=c; c=a%b; } return b; } int Lcm(int a,int b) { int c; if(a<=0||b<=0) return -1; c=Gcd(a,b); return a*b/c; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App