1088 Rational Arithmetic
2024-09-05 03:43:37
题意:
给出两个分式(a1/b1 a2/b2),分子、分母的范围为int型,且确保分母不为0。计算两个分数的加减乘除,结果化为最简的形式,即"k a/b",其中若除数为0的话,输出Inf。
思路:
分数四则运算的模板题。分析详见:基础数学问题
代码:
#include <stdio.h> #include <string.h> #include <stdlib.h>//abs() typedef long long LL; struct Fraction{ LL up;//分子 LL down;//分母 Fraction():up(),down(){}//默认初始化 Fraction(int up_,int down_):up(up_),down(down_){} }; //求最大公约数 int gcd(LL a,LL b){ ) return a; else return gcd(b,a%b); } //分数化简 void simplify(Fraction& a){ ) { a.down = -a.down; a.up = -a.up; } ){ a.down=; }else{ int commonFractor=gcd(abs(a.up), abs(a.down));//注意要加绝对值!!! a.up/=commonFractor; a.down/=commonFractor; } } //打印分数 void printFraction(Fraction a){ simplify(a); ) printf("("); ) printf("%lld",a.up);//如果分母为1,则只打印分子即可 else{ if(abs(a.up)>abs(a.down)) printf("%lld %lld/%lld",a.up/a.down,abs(a.up)%a.down,a.down); else printf("%lld/%lld",a.up,a.down); } ) printf(")"); } //分数相加 Fraction add(Fraction a,Fraction b){ Fraction c; c.down=a.down*b.down; c.up=a.up*b.down+a.down*b.up; simplify(c); return c; } //分数相减 Fraction sub(Fraction a,Fraction b){ Fraction c; c.down=a.down*b.down; c.up=a.up*b.down-a.down*b.up; simplify(c); return c; } //分数相乘 Fraction multiply(Fraction a,Fraction b){ Fraction c; c.down=a.down*b.down; c.up=a.up*b.up; simplify(c); return c; } //分数相除 Fraction divide(Fraction a,Fraction b){ Fraction c; c.down=a.down*b.up; c.up=a.up*b.down; simplify(c); return c; } void showEquation(Fraction a,Fraction b,const char* op) { bool flag=true; Fraction ans; printFraction(a); ){ printf(" + "); ans=add(a,b); }){ printf(" - "); ans=sub(a,b); }){ printf(" * "); ans=multiply(a,b); }else { printf(" / "); ) flag=false; else ans=divide(a,b); } printFraction(b); printf(" = "); if(flag) printFraction(ans); else printf("Inf"); printf("\n"); } int main() { LL a1,b1,a2,b2; scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2); Fraction a(a1,b1); Fraction b(a2,b2); showEquation(a,b,"add"); showEquation(a,b,"sub"); showEquation(a,b,"multiply"); showEquation(a,b,"divide"); ; }
最新文章
- MySQL排序原理与案例分析
- oracle从零开始学习笔记 二
- Intel&#174; Threading Building Blocks (Intel&#174; TBB) Developer Guide 中文 Parallelizing Data Flow and Dependence Graphs并行化data flow和依赖图
- mac添加环境变量
- 转:CWnd的函数,以后可以在这儿找了!
- Android SDK Manager无法更新,内容显示不全的解决办法
- webView、scrollView、TableView,为了防止滚动时出现偏移,底部黑框问题等
- Java运行系统命令并获取值(Process java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)
- WEB标准:标准定义、好处、名词解释、常用术语、命名习惯、浏览器兼容、代码书写规范
- 英伟达CUVID硬解,并通过FFmpeg读取文件
- !终端伪装测试之fuck校园网
- 如何把word中的图片怎么导出来呢?
- django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
- 两种方法上传本地文件到github(转)
- P1516 青蛙的约会
- mysql自动更新时间
- node微信公众号开发---自动回复
- HDFS 总结
- TFS 2015 生成不输出任何结果
- jmeter乱码问题
热门文章
- JNI_Z_04_属性的操作(非String类型的属性)
- SDWebImage支持URL不变时更新图片内容
- LeetCode第[62]题(Java):Unique Paths 及扩展
- 今夜我们一起学习 Apache Shiro
- poj3311 状压dp+floyd
- XMLHttpRequest Level2
- 记录下工作中使用的pdf.js
- 持久层框架:MyBatis 3.2(2)
- 日常生活小技巧 -- 惠普 Windows10 进入安全模式
- canvas 创建颜色渐变柱状图