分数(有理数)的四则运算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"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...
随机推荐
- 关于javascript 回调函数
http://segmentfault.com/q/1010000000212522 如何避免Javascript中回调函数的嵌套? http://javascript.ruanyifeng.com/ ...
- cf B. The Fibonacci Segment
http://codeforces.com/contest/365/problem/B #include <cstdio> #include <cstring> #includ ...
- 在WPF中使用AForge.net控制摄像头拍照
原文:在WPF中使用AForge.net控制摄像头拍照 利用AForge.net控制摄像头拍照最方便的方法就是利用PictureBox显示摄像头画面,但在WPF中不能直接使用PictureBox.必须 ...
- BOT、BT、PPP形式介绍(3)
PPP 20世纪90年代后,一种崭新的融资模式-PPP模式(Public-Private-Partnership,即“公共部门-私人企业-合作”的模式)在西方特别是欧洲流行起来,在公共基础设施 ...
- hdu2089:不要62(基础数位dp)
题意:规定一个合法的号码不能含有4或者是连续的62 给定区间[n,m] 问此区间内合法的号码的个数 分析:数位dp dp[i][j]代表 最高位为 j 的 i 位数有多少个合法的 然后按题目规则进行转 ...
- HDU 3586 : Information Disturbing
Problem Description In the battlefield , an effective way to defeat enemies is to break their commun ...
- phpcms:六、频道页(category.html)
1.当前栏目的ID:{$catid}标题样式:{title_style($v[style])}(在添加内容或编辑内容的时候,标题右边 有一个选择颜色的块).{str_cut(strip_tags($v ...
- windows 杀进程
selenium自动化时,会启动chromedriver.exe,每次运行一次,就多启动一个,执行多次就会拖慢系统.如下批处理命令,可以批量杀掉进程 tasklist |find "chro ...
- [置顶] iOS 应用程序内部国际化,不跟随系统语言
前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 – 今天要讲的是不跟随系统的切换语言版本方案,即程序内部的切换语言版本方案. 一.总则: 应用内部语言 ...
- js推断元素是否隐藏
if( document.getElementById("div").css("display")==='none') if( document.getEl ...