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 ...
随机推荐
- Spring scope解惑
在2.0之前只有两种singleton和prototype(网上说的,没去验证),后面增加了session.request.global session三种专门用于web应用程序上下文的Bean Si ...
- 清除微信浏览器网址的缓存,cookie
清理微信浏览网站的缓存,Cookie http://blog.csdn.net/cui55/article/details/53939462 怎么清除IOS微信浏览器中的cookie? 退出微信重新登 ...
- 利用Python检验你的策略参数是否过拟合(转)
过拟合现象 一般来说,量化研究员在优化其交易策略参数时难免会面临这样一个问题:优化过后的策略在样本内表现一般来说均会超过其在样本外的表现,即参数过拟合.对于参数优化来说,由于优化时存在噪音,过拟合是不 ...
- [转]linux将一个服务器上的文件或者文件夹复制到另一台服务器上
本文转载自<linux 将一个服务器上的文件或者文件夹复制到另一台服务器上>,有时间实践一把 使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹 ...
- (http请求+cookie)的交互流程
如果步骤5携带的是过期的cookie或者是错误的cookie,那么将认证失败,返回至要求身份认证页面. 当前 Cookie 有两个版本:Version 0 和 Version 1.通过它们有两种设置响 ...
- iframe框架
在一个页面里做一个区域引入另一个页面的方法: <a href="http://www.baidu.com" target="in">百度</a ...
- PostgreSQL内存配置记录
PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录. postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.mai ...
- Chrome设置允许ajax跨域
最近在做一个前后端分离的项目,在Windows上用.Net WebApi时候的后端,在Mac上用ng2搭建的前端. 要实现前后端对接进行调试,就必须要解决ajax跨域的问题,实现方法如下: //在te ...
- oracle重建undo表空间
create undo tablespace UNDOTBS2 datafile 'D:\oracle\product\10.2.0\oradata\ttonline\UNDOTBS02.DBF' s ...
- LEX下出毛病的问题
毛病! 1.今日写词法分析,回想起第一次写时候的蓝色警告:不要随便管理员.so,便Win+R,"cmd",回车. 2.在用lex写的时候,注意注释是 /*注释放于此处*/ 而非一般 ...