分数(有理数)的四则运算PAT1088
2015-02-05
PAT- B1088. Rational Arithmetic (20)
http://www.patest.cn/contests/pat-a-practise/1088
#include <iostream>
#include <cmath>
using namespace std;
typedef long long LL;
typedef struct Fraction{
LL up,down;
};
LL gcd(LL a,LL b){
return b== ? a : gcd(b,a%b);
}
Fraction reduction(Fraction res){
if(res.down<){
res.down=-res.down;
res.up=-res.up;
}
else if(res.up==)
res.down==;
else{
LL d=gcd(abs(res.up),res.down);
res.up/=d;
res.down/=d;
}
return res;
}
Fraction add(Fraction a,Fraction b){
Fraction res;
res.up=a.up*b.down+a.down*b.up;
res.down=a.down*b.down;
return reduction(res);
}
Fraction sub(Fraction a,Fraction b){
Fraction res;
res.up=a.up*b.down-a.down*b.up;
res.down=a.down*b.down;
return reduction(res);
}
Fraction multi(Fraction a,Fraction b){
Fraction res;
res.up=a.up*b.up;
res.down=a.down*b.down;
return reduction(res);
}
Fraction divide(Fraction a,Fraction b){
Fraction res;
res.up=a.up*b.down;
res.down=a.down*b.up;
return reduction(res);
}
void showFraction(Fraction res){
res=reduction(res);
if(res.up<)
printf("(");
if(res.down==)
printf("%lld",res.up);
else if(res.up==)
printf("");
else if(abs(res.up)>res.down){
printf("%lld %lld/%lld",res.up/res.down,abs(res.up)%res.down,res.down);
}
else{
printf("%lld/%lld",res.up,res.down);
}
if(res.up<)
printf(")");
}
void output(Fraction a,Fraction b,char ch){
showFraction(a);
printf(" %c ",ch);
showFraction(b);
printf(" = ");
switch(ch){
case '+':
showFraction(add(a,b));
break;
case '-':
showFraction(sub(a,b));
break;
case '*':
showFraction(multi(a,b));
break;
case '/':
if(b.up==)
printf("Inf");
else
showFraction(divide(a,b));
break;
default:
printf("error");
break;
}
printf("\n");
}
int main()
{
Fraction a,b,ans;
while(scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down)!=EOF){
a=reduction(a);
b=reduction(b);
output(a,b,'+');
output(a,b,'-');
output(a,b,'*');
output(a,b,'/');
}
return ;
}
分数(有理数)的四则运算PAT1088的更多相关文章
- 第十七周oj刷题——Problem B: 分数类的四则运算【C++】
Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Outpu ...
- python 分数的数学四则运算
import fractions f1 = fractions.Fraction(, ) f2 = fractions.Fraction(, ) print('{} + {} = {}'.format ...
- 用C++实现的有理数(分数)四则混合运算计算器
实现目标 用C++实现下图所示的一个console程序: 其中: 1.加减乘除四种运算符号分别用+.-.*./表示, + 和 - 还分别用于表示正号和负号. 2.分数的分子和分母以符号 / 分隔. 3 ...
- 30道四则运算<1>
#include<iostream> using namespace std; #define random()(rand()%100) class shuzi //shuzi类的功能是产 ...
- 对"一维最大子数组和"问题的思考
对"一维最大子数组和"问题的思考(homework-01) 一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和.“最大子数组和”是一个很好的IT面试考 ...
- 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]
作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...
- [python学习手册-笔记]003.数值类型
003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...
- 用java具体代码实现分数(即有理数)四则运算
用java具体代码实现分数(即有理数)四则运算 1,背景 Java老师布置了一个关于有理数运算的题目,因为参考书上有基本代码,所以自己主要是对书上代码做了一点优化,使其用户交互性更加友好以及代码封装性 ...
- PAT Basic 1034 有理数四则运算(20) [数学问题-分数的四则运算]
题目 本题要求编写程序,计算2个有理数的和.差.积.商. 输⼊格式: 输⼊在⼀⾏中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...
随机推荐
- c++ 连接数据库
#include <icrsint.h> #include<iostream> #include<iomanip> #include <string> ...
- JAVA中this用法小结[转]
Java关键字this只能用于方法方法体内.当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this.因此,this只能在类中的非静态方法中使用,静 ...
- 安卓仿制新浪微博(一)之OAuth2授权接口
这里需要用到请求授权(authorize)以及获取授权(access_token) 第一步: 将新浪的sdk放在src/libs下面 二: //创建方法实现authorize public void ...
- python中的嵌套类(内部类调用外部类中的方法函数)
在为书中版本是3.X的,但2.X不太支持直接调用. 所以,在PYTHON2.X中,要在内部类中调用外部类的方法,就必须得实例化外部类,然后,传入实例进行调用. 花了我两个小时啊,资料没找到,自己一个一 ...
- QDialog 模态对话框与事件循环(exec其实就是调用了show和eventLoop.exec)
起源 qtcn中文论坛中有网友问到: 假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件.当此程序运行到某阶段时,弹出一个模态窗体B(书上 ...
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...
- BOT、BT、PPP形式介绍(3)
PPP 20世纪90年代后,一种崭新的融资模式-PPP模式(Public-Private-Partnership,即“公共部门-私人企业-合作”的模式)在西方特别是欧洲流行起来,在公共基础设施 ...
- dos判断系统版本的语句,
是我在单位批量安装软件使用的批处理,判断方法如下,仅供参考,本人不懂任何编程,大家凑合着看: winxp和win7判断: net config workstation |(find /i " ...
- bzoj2346[Baltic 2011]Lamp
Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...
- 用Nginx实现Session共享的均衡负载
前言 大学三年多,也做个几个网站和APP后端,老是被人问到,如果用户多了服务器会不会挂,总是很尴尬的回答:“哈哈,我们的用户还少,到了服务器撑不住的时候,估计都上市了吧”.说是这么说,但是对于有强迫症 ...