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 ...
随机推荐
- HDFS集群启动的常见问题
hdfs集群启动的常见问题 1.用浏览器访问namenode的50070端口,不正常,需要诊断问题出在哪里: a.在服务器的终端命令行使用jps查看相关进程 观察节点是否存活 b.如果已经知道了启动失 ...
- 从互信息的角度来理解tf-idf
先介绍tf idf 在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率.这个数字是对词数(term count)的归一化,以防止它偏向长的文件.( ...
- 【C#基本功】1》panel的C#用法 panel
上面截图是panel在labview中的用法,在labview中panel加动态调用技术可以解决很多难题. 对于刚刚接触C#的我来说,如何实现pannel动态加载界面,也是一个必须首要克服的难点. 经 ...
- HttpClient for .NET 4.0
Install-Package Microsoft.Net.Http -Version 2.2.29
- socket长连接和短链接区别
短连接 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束后就中断连接.短连接是指SOCKET连接后发送后接收完数据后马上断 ...
- http Code含义
5xx - 服务器错误 服务器由于遇到错误而不能完成该请求.
- 异步请求(ajax,http) 之 逐渐完善的大全
异步请求在我们的开发之中是经常需要学习和理解的内容,我们将会在这一篇文章中依据不同的语言和环境内容进行归类讲解. JS: ajax是我们最为常用的页面异步请求,在只需要修改部分页面内容而不需要更换全部 ...
- TCPL学习笔记:4-12以及4-13。关于使用递归的问题。
4-12.写一个函数itoa,通过递归调用将整数转换成为字符串. #include <stdio.h> #include <stdlib.h> void Itoa(int nu ...
- 使用LNMP环境安装typecho博客的全程记录
虽然我是搞asp.net的 但是十分欣赏php,php有很多开源的博客程序 比如大名鼎鼎的Wordpress.还有各种独立博客大牛使用的z-blog,以及短小精悍的emblog. wordpress臃 ...
- hibernate的注解属性mappedBy详解【实际项目】
[应用情节: 技术问答] 一个类是问题类 一个类是回答类 一个类是针对回答的讨论类 关系是一个问题对应多个答案 一个答案对应多个讨论 [三个类的注解关系] 问题类的 答案类的 讨论类的