R. 有理数运算 (Rational Number Arithmetic)

传统 1000 ms 256 MiB
标准 IO
文本比较

题目描述

请创建一个 RationalNumber(分数)类,用于处理分数的算术运算与逻辑比较。该类需要满足以下严格的数学与工程要求:

  1. 构造与化简:构造函数应能处理分子和分母。
    • 如果分母为 00,应做特殊处理(本题保证输入数据分母不为0,但除法运算结果可能产生分母为0的情况,需输出错误或由程序自动处理为合法状态)。
    • 分数必须始终保持最简形式(reduction)。例如,3/93/9 应存储为 1/31/3
    • 分母必须始终为正数。如果分母为负,符号应移动到分子(例如 1/21/-2 应转化为 1/2-1/21/2-1/-2 应转化为 1/21/2)。
  2. 运算符重载
    • 实现加法 (+)、减法 (-)、乘法 (*)、除法 (/)。
    • 实现关系运算符 (>, <, >=, <=) 和相等运算符 (==, !=)。

给定一系列分数运算指令,请输出运算结果。

输入格式

输入的第一行包含一个整数 TT,表示测试用例的数量。 接下来的 TT 行,每行包含一个运算符 op 和四个整数 n1,d1,n2,d2n_1, d_1, n_2, d_2,分别代表两个分数:

r1=n1d1,r2=n2d2r_1 = \frac{n_1}{d_1}, \quad r_2 = \frac{n_2}{d_2}

运算符 op 可能是以下字符/字符串之一: +, -, *, /, >, <, >=, <=, ==, !=

输出格式

对于每组测试数据,输出一行结果:

  • 如果是算术运算(+, -, *, /):输出结果分数。格式为 numerator/denominator。如果结果是整数(即分母为1),则仅输出 numerator
  • 如果是关系运算:如果结果为真输出 true,否则输出 false

样例

样例输入

6
+ 7 3 1 3
- 7 3 1 3
* 7 3 1 3
/ 7 3 1 3
> 1 3 1 2
== 2 4 1 2

样例输出

8/3
2
7/9
7
false
true

数据范围与提示

数据范围

  • 1T1001 \leq T \leq 100
  • 1000n1,d1,n2,d21000-1000 \leq n_1, d_1, n_2, d_2 \leq 1000
  • 输入保证初始分母 d1,d20d_1, d_2 \neq 0
  • 对于除法运算,保证除数不为 00

提示

根据题目要求,应当实现一个私有函数 reduction() 用于在每次运算后自动约分分数。