B. 分数约分

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

题目描述

编写函数 simplifyFraction(int a, int b),对分数 ab\frac{a}{b} 进行约分。

  • 如果成功约分,返回 1,并输出约分后的最简分数;
  • 如果本身已最简,返回 0,并提示无需约分。

分数 ab\frac{a}{b} 最简当且仅当 gcd(a,b)=1\text{gcd}(|a|, |b|)=1

主函数循环读入多组数据,对每组调用该函数并按要求输出。

输入格式

多组输入,每行两个整数 a,ba, b,以空格分隔,表示分数 ab\frac{a}{b}
输入以 EOF 结束。

输出格式

每组数据输出两行:

  • ab 按照输入的正负号原样输出。
  • pq 输出时,无论是否进行了约分,都需要保证 q>0q > 0
Test fraction a/b
Reduced fraction: p/q
Returned value: 1

Test fraction a/b
No reduction needed: p/q
Returned value: 0

样例

样例输入

84 66
5 7
-1 -2
63 -72

样例输出

Test fraction 84/66
Reduced fraction: 14/11
Returned value: 1
Test fraction 5/7
No reduction needed: 5/7
Returned value: 0
Test fraction -1/-2
No reduction needed: 1/2
Returned value: 0
Test fraction 63/-72
Reduced fraction: -7/8
Returned value: 1

数据范围与提示

数据范围

  • 100a,b100-100 \le a, b \le 100b0b \ne 0
  • 保证输入合法,无需处理分母为 0 的情况。

提示

  • 使用 std::gcd(C++17 及以上)或自行实现求最大公约数函数。
  • 注意处理负数:使分母为正,符号提到分子。
  • 自行测试时,输入 ctrl+Z 可以模拟 EOF;建议使用 cin 函数的返回值来判断是否读到 EOF(如果读到 EOF,cin 将返回 0,否则返回 1)
int main(){
    while(cin>>a>>b){ // 成功输入时,cin 返回非零,进入循环;不成功时,返回 0,退出循环。
        // your code
    }
}