【问题描述】
定义有理数类,定义计算两个有理数的和的方法。程序输入两个有理数,输出它们的和。
【输入形式】
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是正整数。
【输出形式】
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
【样例输入】
1/3 1/6
【样例输出】
1/2
class rational():
def __init__(self , x1 , x2 , y1 , y2):
self.x1 = x1
self.x2 = x2
self.y1 = y1
self.y2 = y2
def add(self):
if self.x2 == self.y2:#如果分母相等
k = self.x1 + self.y1#分子
l = self.y2#分母
else:
a1 = self.x1 * self.y2#分子
b1 = self.y1 * self.x2 # 分子
a2 = self.x2 * self.y2#分母
k = a1 + b1#分子之和
l = a2#分母
# if k % l == 0:
# return k//l
# else:
# for i in range(2, k):
# while k % i == 0 and l % i == 0:
# k = k // i
# l = l // i
# return str(k) + '/' + str(l)
x = k
y = l
while k % l != 0:#通过辗转相除法求得最大公约数
k, l = l, (k % l)#l是最大公倍数
if x % y == 0:#判断分子是不是分母的倍数
return x//y
else:
return str(x//l) + '/' + str(y // l)
a = input().split()
b = []
for i in a:
n , m = i.split('/')
b.append(int(n))
b.append(int(m))
num = rational(b[0] , b[1] , b[2] , b[3])
print(num.add())