首页 > 试题广场 >

【模板】分数四则运算

[编程题]【模板】分数四则运算
  • 热度指数:404 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 512M,其他语言1024M
  • 算法知识视频讲解
\hspace{15pt}对于给定的两个分数和四则运算符号,计算分数运算的结果。

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 5 \times 10^5\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入五个整数 a,b,op,c,d \left( -10^9\leqq a,b,c,d \leqq 10^9;\ 1 \leqq op \leqq 4\right) 代表 \dfrac{a}{b} 与 \dfrac{c}{d} 进行 op 运算,1,2,3,4 分别代表加减乘除。


输出描述:
\hspace{15pt}对于每一组测试数据,如果答案不存在,在一行上输出 \texttt{inf} ;否则,在一行上输出两个整数,代表分数四则运算的分子分母,你需要确保输出的是最简分数。特别的,如果是非负分数,则不应当输出负号;如果是负分数,负号与分子一同输出。
示例1

输入

5
1 2 1 1 2
1 2 2 1 2
-1 2 3 0 2
1 2 4 1 2
1 0 1 0 1

输出

1 1
0 1
0 1
1 1
inf

说明

\hspace{15pt}对于第一组测试数据,列式为 \displaystyle \dfrac{1}{2} + \dfrac{1}{2} = \dfrac{2}{2} \to \dfrac{1}{1}
\hspace{15pt}对于第二组测试数据,列式为 \displaystyle \dfrac{1}{2} - \dfrac{1}{2} = \dfrac{0}{2} \to \dfrac{0}{1}
\hspace{15pt}对于第三组测试数据,列式为 \displaystyle \left(-\dfrac{1}{2}\right) \times \dfrac{0}{2} = -\dfrac{0}{4} \to \dfrac{0}{1}
\hspace{15pt}对于第四组测试数据,列式为 \displaystyle \dfrac{1}{2} \div \dfrac{1}{2} = \dfrac{1}{1}
import math
T = int(input())
res=[]

for _ in range(T):
    a,b,op,c,d = map(int,input().split())
    x,y=0,0
    if b==0&nbs***bsp;d==0:
        res.append("inf")
        continue
    if op==1:
        x,y= a*d+c*b,b*d
    elif op==2:
        x,y= a*d-c*b,b*d
    elif op==3:
        x,y= a*c,b*d
    else:
        if c==0:
            res.append("inf")
            continue
        x,y= a*d,c*b
    if y<0:
        y*=-1
        x*=-1
    g=math.gcd(x,y)
    t = [x//g,y//g]
    res.append(t)

for i in res:
    if i[0]!="i":
        print(*i)
        continue
    print("".join(i))

发表于 2025-12-13 17:45:07 回复(0)