2015-02-05

PAT- B1088. Rational Arithmetic (20)

http://www.patest.cn/contests/pat-a-practise/1088

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. typedef long long LL;
  5. typedef struct Fraction{
  6. LL up,down;
  7. };
  8. LL gcd(LL a,LL b){
  9. return b== ? a : gcd(b,a%b);
  10. }
  11. Fraction reduction(Fraction res){
  12. if(res.down<){
  13. res.down=-res.down;
  14. res.up=-res.up;
  15. }
  16. else if(res.up==)
  17. res.down==;
  18. else{
  19. LL d=gcd(abs(res.up),res.down);
  20. res.up/=d;
  21. res.down/=d;
  22. }
  23. return res;
  24. }
  25. Fraction add(Fraction a,Fraction b){
  26. Fraction res;
  27. res.up=a.up*b.down+a.down*b.up;
  28. res.down=a.down*b.down;
  29. return reduction(res);
  30. }
  31. Fraction sub(Fraction a,Fraction b){
  32. Fraction res;
  33. res.up=a.up*b.down-a.down*b.up;
  34. res.down=a.down*b.down;
  35. return reduction(res);
  36. }
  37. Fraction multi(Fraction a,Fraction b){
  38. Fraction res;
  39. res.up=a.up*b.up;
  40. res.down=a.down*b.down;
  41. return reduction(res);
  42. }
  43. Fraction divide(Fraction a,Fraction b){
  44. Fraction res;
  45. res.up=a.up*b.down;
  46. res.down=a.down*b.up;
  47. return reduction(res);
  48. }
  49. void showFraction(Fraction res){
  50. res=reduction(res);
  51. if(res.up<)
  52. printf("(");
  53. if(res.down==)
  54. printf("%lld",res.up);
  55. else if(res.up==)
  56. printf("");
  57. else if(abs(res.up)>res.down){
  58. printf("%lld %lld/%lld",res.up/res.down,abs(res.up)%res.down,res.down);
  59. }
  60. else{
  61. printf("%lld/%lld",res.up,res.down);
  62. }
  63. if(res.up<)
  64. printf(")");
  65. }
  66. void output(Fraction a,Fraction b,char ch){
  67. showFraction(a);
  68. printf(" %c ",ch);
  69. showFraction(b);
  70. printf(" = ");
  71. switch(ch){
  72. case '+':
  73. showFraction(add(a,b));
  74. break;
  75. case '-':
  76. showFraction(sub(a,b));
  77. break;
  78. case '*':
  79. showFraction(multi(a,b));
  80. break;
  81. case '/':
  82. if(b.up==)
  83. printf("Inf");
  84. else
  85. showFraction(divide(a,b));
  86. break;
  87. default:
  88. printf("error");
  89. break;
  90. }
  91. printf("\n");
  92. }
  93. int main()
  94. {
  95. Fraction a,b,ans;
  96. while(scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down)!=EOF){
  97. a=reduction(a);
  98. b=reduction(b);
  99. output(a,b,'+');
  100. output(a,b,'-');
  101. output(a,b,'*');
  102. output(a,b,'/');
  103. }
  104. return ;
  105. }

分数(有理数)的四则运算PAT1088的更多相关文章

  1. 第十七周oj刷题——Problem B: 分数类的四则运算【C++】

    Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Outpu ...

  2. python 分数的数学四则运算

    import fractions f1 = fractions.Fraction(, ) f2 = fractions.Fraction(, ) print('{} + {} = {}'.format ...

  3. 用C++实现的有理数(分数)四则混合运算计算器

    实现目标 用C++实现下图所示的一个console程序: 其中: 1.加减乘除四种运算符号分别用+.-.*./表示, + 和 - 还分别用于表示正号和负号. 2.分数的分子和分母以符号 / 分隔. 3 ...

  4. 30道四则运算<1>

    #include<iostream> using namespace std; #define random()(rand()%100) class shuzi //shuzi类的功能是产 ...

  5. 对"一维最大子数组和"问题的思考

    对"一维最大子数组和"问题的思考(homework-01) 一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和.“最大子数组和”是一个很好的IT面试考 ...

  6. 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]

    作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...

  7. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  8. 用java具体代码实现分数(即有理数)四则运算

    用java具体代码实现分数(即有理数)四则运算 1,背景 Java老师布置了一个关于有理数运算的题目,因为参考书上有基本代码,所以自己主要是对书上代码做了一点优化,使其用户交互性更加友好以及代码封装性 ...

  9. PAT Basic 1034 有理数四则运算(20) [数学问题-分数的四则运算]

    题目 本题要求编写程序,计算2个有理数的和.差.积.商. 输⼊格式: 输⼊在⼀⾏中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...

随机推荐

  1. Linux下的管道命令有这些:

    Linux下的管道命令有这些: 选取命令:cat grep 排序命令:sort wc uniq 双向重定向:tee 字符转换命令: tr, col, join, paste, expand 切割命令: ...

  2. Python 变量有效范围

  3. SSH三者作用

    Struts在项目中的作用 Struts 在项目主要起控制作用,只要用于web层(即视图层和控制层)Struts本身是使用典型的MVC结构实现的,项目中使用了struts之后就等于项目也是一个MVC结 ...

  4. B树叶子节点split

    一.B-Tree索引的分裂 1. 创建测试表 SQL> create table split_tab (id number, name varchar2(100)); 表已创建. SQL> ...

  5. cf492B Vanya and Lanterns

    B. Vanya and Lanterns time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. Linux远程访问windows时,出现"连接被对端重置"错误

    1.sudo apt-get install rdesktop 需要下载 152 kB 的软件包.       解压缩后会消耗掉 512 kB 的额外空间. 2.运行时出现错误 root@oskey- ...

  7. Java并发实现一(并发的实现之Thread和Runnable的区别)

    package com.subject01; public class ThreadOrRunnable { public static void main(String[] args) { Syst ...

  8. hdu 4983 Goffi and GCD(欧拉函数)

    Problem Description Goffi is doing his math homework and he finds an equality on his text book: gcd( ...

  9. stardict词典(星际译王)

    sudo apt-get install stardict 下载词库: http://abloz.com/huzheng/stardict-dic/zh_CN/ 把下载的压缩包解压,以a为例cd /u ...

  10. 设计: ListView 接口,and the missing read-only interfaces in java collection framework

    Java的集合框架以其成功易用的设计征服了很多人(包括我),并且教科书式的诠释了泛型的应用方式. 我也是被 Joshua Bloch 的书引领入门,从中得益良多.我当然不会认为自己在设计上比他懂得更多 ...