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 ...
随机推荐
- Treflection03_getFields_getField
1. package reflectionZ; import java.lang.reflect.Constructor; import java.lang.reflect.Field; public ...
- html笔记(1)
hgroup 代替div figure figcaption 独立流内容 替代 dl mark 替代 span
- 入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 介绍 (一)
现代的应用程序看起来像这样: 典型的交互操作包括: 浏览器与 web 应用程序进行通信 Web 应用程序与 web Api (有时是在他们自己的有时代表用户) 通信 基于浏览器的应用程序与 web A ...
- jQuery: Redirect to other URL
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...
- npm的镜像和淘宝互换
1.得到原本的镜像地址 npm get registry > https://registry.npmjs.org/ 设成淘宝的 npm config set registry http://r ...
- MySQL备份与恢复实战案例及生产方案
按天备份 按周备份 mysql的mysqldump备份什么时候能派上用场1,迁移或者升级数据库时2,增加从库的时候3,如果因为硬件或特殊情况,主库或者从库宕机,主从可以互相切换,无需备份4,人为的DD ...
- spring定时器的定义
1.0/5 * * * * ?表示多长时间: 每 5 秒执行一次 七个域从左到右依次是,秒,分,时,日,月,周几,年....最后一个可选.同样是七个域与当前时间匹配的时候则执行... n/m 表示从n ...
- php判断字符串长度 strlen()与mb_strlen()函数
PHP strlen() 函数 定义和用法 strlen() 函数返回字符串的长度. 语法 strlen(string) 参数:string <?php $str=‘中文a字1符‘; echo ...
- New Concept English three (27)
35w/m 67 It has been said that everyone lives by selling something. In the light of this statement, ...
- 绕过SQL限制的方法
突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以 ...