1088 Rational Arithmetic
题意:
给出两个分式(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");
;
}
1088 Rational Arithmetic的更多相关文章
- PAT 1088 Rational Arithmetic[模拟分数的加减乘除][难]
1088 Rational Arithmetic(20 分) For two rational numbers, your task is to implement the basic arithme ...
- 1088 Rational Arithmetic(20 分)
For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...
- PAT 1088. Rational Arithmetic
For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...
- PAT Advanced 1088 Rational Arithmetic (20) [数学问题-分数的四则运算]
题目 For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate ...
- PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算
输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...
- PAT (Advanced Level) 1088. Rational Arithmetic (20)
简单题. 注意:读入的分数可能不是最简的.输出时也需要转换成最简. #include<cstdio> #include<cstring> #include<cmath&g ...
- 【PAT甲级】1088 Rational Arithmetic (20 分)
题意: 输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式.小数需要用"("和")"括起来,分母为0的话输出"Inf&qu ...
- 1088. Rational Arithmetic (20)
1.注意在数字和string转化过程中,需要考虑数字不是只有一位的,如300转为"300",一开始卡在里这里, 测试用例: 24/8 100/10 24/11 300/11 2.该 ...
- PAT1088:Rational Arithmetic
1088. Rational Arithmetic (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue F ...
随机推荐
- scala学习手记18 - Any和Nothing
Any 前面已经有两次提到过:在scala中,Any类是所有类的超类. Any有两个子类:AnyVal和AnyRef.对应Java直接类型的scala封装类,如Int.Double等,AnyVal是它 ...
- 2012 Multi-University Training Contest 7
2012 Multi-University Training Contest 7 A.As long as Binbin loves Sangsang B.Dead or alive C.Dragon ...
- Button之常用事件
Button之常用事件 一.简介 1.button介绍 本文介绍了Buttonn的点击事件,触摸事件,获得焦点事件 接口分别为:OnClickListener,OnTouchListener,OnFo ...
- python之单元测试框架—unittest(补充)
一. unittest最核心的四个概念 unittest中最核心的四个概念是:test case,test suite,test runner,test fixture TestCase:一个test ...
- JsonTools 工具类
import net.sf.json.JSONObject; public class JsonTools { public static JSONObject getJSONObject(Strin ...
- eclipse配置tomcat运行项目访问不加项目名
- opencv:基本图形绘制
可以使用opencv绘制 直线.圆.方形.椭圆等基本图形. 示例代码: #include <opencv.hpp> using namespace cv; int main() { // ...
- 006——VUE中的内容与属性中使用javascript表达式的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jq为什么能用$操作
jq对dom节点的操作相信大家都很熟悉, $("input").val("value"); 直接用$来获取dom节点的方式也非常便捷方便,那么他是怎么实现的呢? ...
- R-一页多图
https://blog.csdn.net/ailsa__/article/details/45932753