做起来确实很长,注意全部要用long long,否则很多测试点通不过。

#include<cstdio>
#include<algorithm>
using namespace std;
int gcd(long long a, long long b)
{if (b == 0) return a;else return gcd(b,a%b);
}
struct fraction
{long long up, down;
}a,b;
fraction reduction(fraction result)
{if (result.up == 0) result.down = 1;else{long long x = gcd(abs(result.up), result.down);result.up /= x;result.down /= x;}return result;
}
void showresult(fraction a)
{if (a.up > 0){if (a.down == 1) printf("%lld", a.up);else if (a.up > a.down){printf("%lld %lld/%lld", a.up / a.down, abs(a.up%a.down), a.down);}else if (a.up == a.down) printf("%lld", a.up);else printf("%lld/%lld", a.up, a.down);}else if (a.up == 0) printf("0");else{printf("(");if (a.down == 1) printf("%lld", a.up);else if (abs(a.up) > a.down){printf("%lld %lld/%lld", a.up / a.down, abs(a.up%a.down), a.down);}else if (a.up == a.down) printf("%lld", a.up);else printf("%lld/%lld", a.up, a.down);printf(")");}
}
fraction add(fraction a, fraction b)
{fraction result;result.up = a.up*b.down + a.down*b.up;result.down = a.down*b.down;return reduction(result);
}
fraction mins(fraction a, fraction b)
{fraction result;result.up = a.up*b.down - a.down*b.up;result.down = a.down*b.down;return reduction(result);
}
fraction mult(fraction a, fraction b)
{fraction result;result.up = a.up*b.up;result.down = a.down*b.down;return reduction(result);
}
fraction div(fraction a, fraction b)
{fraction result;result.up = a.up*b.down;result.down = a.down*b.up;if (result.down < 0){result.up = -result.up;result.down = -result.down;}return reduction(result);}
int main()
{scanf("%lld/%lld %lld/%lld", &a.up, &a.down, &b.up, &b.down);a = reduction(a), b = reduction(b);showresult(a);printf(" + ");showresult(b);printf(" = ");showresult(add(a, b));printf("\n");showresult(a);printf(" - ");showresult(b);printf(" = ");showresult(mins(a, b));printf("\n");showresult(a);printf(" * ");showresult(b);printf(" = ");showresult(mult(a, b));printf("\n");showresult(a);printf(" / ");showresult(b);printf(" = ");if (b.up == 0) printf("Inf");else showresult(div(a, b));printf("\n");return 0;
}

A1088 Rational Arithmetic (20 分)相关推荐

  1. 1088 Rational Arithmetic (20 分)【难度: 简单 / 知识点: 模拟】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805378443755520 PAT乙级的原题,直接模拟即可 #inclu ...

  2. 1081 Rational Sum (20 分) 分数加法 简单模拟

    1081 Rational Sum (20 分) Given N rational numbers in the form numerator/denominator, you are suppose ...

  3. 1081 Rational Sum (20 分)_22行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given N rational numbers in the form numerator/denominator, you a ...

  4. 21. A1088 Rational Arithmetic

    1. 题目描述 For two rational numbers, your task is to implement the basic arithmetics, that is, to calcu ...

  5. Rational Arithmetic

    1088. Rational Arithmetic (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue F ...

  6. 7-1 查找书籍(20 分)(程序设计天梯赛模拟练习题)

    7-1 查找书籍(20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书 ...

  7. PTA—输出全排列 (20分) 递归回溯思想

    PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...

  8. 2、求100以内的素数之和。(20分)

    题目: /* 2.求100以内的素数之和.(20分) */ 代码: public class Two207 {public static void main(String[] args) {int s ...

  9. 1、输入四个整数,按照从小到大顺序输出。(20分)

    题目: /* 1.输入四个整数,按照从小到大顺序输出.(20分) */ 代码: 注:题目说的是四个数的排序,我就直接写了个冒泡排序 public class One207 {public static ...

最新文章

  1. Go 语言编程 — net/http — HTTP 服务端
  2. python背景虚化
  3. SAP空格无法带出历史记录的解决办法
  4. eai app_EAI的Spring集成教程
  5. MVC3 学习总结一(未发布)
  6. am3352 linux 内核 编译,am335x uboot, kernel 编译
  7. AnyLogic 建立谢林模型
  8. 验票证明怎么打印_纳税人证明在哪里打印
  9. 浅谈数据挖掘中的关联规则挖掘
  10. 菲尔·席勒(Phil Schiller)卸任苹果全球营销高级副总裁,升任苹果研究员
  11. 【JS】常用效果总结
  12. 没有安装sql数据库如何用vs打开mdf数据库文件
  13. 计算机基础名词(二)
  14. 打开程序,出现最佳分辨率提示窗口,导致程序跳出WIN10
  15. 整理的金蝶云苍穹初级练习题
  16. 自我管理的经典书籍推荐:《自我管理必读12篇》
  17. Python实战技巧(9)Python发送邮件
  18. 文献阅读 | Tracing the ancestry of modern bread wheats
  19. 【SPOJ-WACHOVIA】Wachovia Bank【01背包】
  20. ubuntu进入系统黑屏问题

热门文章

  1. 洛谷P2245 星际导航
  2. 树莓派从零开始快速入门系列汇总
  3. 树莓派开发系列教程5——树莓派常用软件及服务(vi、远程桌面、ssh、samba、u盘)
  4. python批量修改替换文件内容
  5. 纤亿通谈大型数据中心互联之T级光传输解决方案
  6. 车载网络基础——预备篇
  7. Maven2的相关知识[zt]
  8. My python learning
  9. [耀湾/微亚细亚] 夜降り萃梦乡 FIN.
  10. Java集成PayPal支付