#CLPR1012. 分数计算器

分数计算器

题目背景

用过卡西欧(Casio)计算器的同学都知道,它可以以 pq\frac{p}{q} 的形式进行分数的四则运算和显示,而对于有理数来说,使用分数进行计算可以一定程度上避免小数的精度损失。

题目描述

在本题中,你需要实现一个分数类(structclass),使用重载运算符的方式使它支持四则运算和基本的比较。

本题会给出操作次数 nn 和初始分数 xx,你要对 xx 进行操作。

定义分数的输入/输出格式为 p/q,其中 pZ,qNp \in \mathbb{Z}, q \in \mathbb{N}^*

定义 55 个操作分别为:

  • +:两个分数相加,x=x+yx = x + y
  • -:两个分数相减,x=xyx = x - y
  • *:两个分数相乘,x=x×yx = x \times y
  • /:两个分数相除,x=x/yx = x / y
  • ?:两个分数进行比较。

对于四则运算操作,输出运算结果并将结果保存到 xx 中;对于比较操作,输出比较结果(><=)。

由于它的使用者比较粗心,你需要判断每次计算中的分数是否有意义:

当在某次操作中出现了无意义的计算时(如除数为 00),要输出 Err,并忽略这次操作。

输入格式

第一行一个正整数 nn 和初始分数 xx,以空格隔开。

接下来 nn 行,每行一个字符 cc 和一个分数 yy,其中 cc 表示本题中定义的操作类型。

注意:题目输入的“分数”不保证为最简,仅仅保证输入符合“分数”的形式(即 p/q),而其化简后可能为整数。

输出格式

对于每次操作,输出操作结果并换行。

对于结果为整数的输出,必须为整数形式。(例如整数 11 不应输出 x/x, xZ, x0x/x, \ x \in \mathbb{Z}, \ x \not = 0

对于结果为分数的输出,必须为最简分数。(要求分数 x/yx/y 满足 gcd(x,y)=1\gcd(x, y) = 1

样例

5 1/6
+ 1/2
- 1/3
* 3/1
/ 1/9
? 9/1
2/3
1/3
1
9
=

数据范围

1n1001 \le n \le 100,输入的分数 pq\frac{p}{q} 满足 0p,q90 \le p, q \le 9(不保证输入有意义,但保证初始分数有意义)。