【问题描述】
计算N个有理数的平均值。要求定义有理数类,并定义计算有理数加法的方法。
【输入格式】
输入第一行给出正整数N(<100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整数;如果是负数,则负号一定出现在最前面。
【输出格式】
在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
【样例输入】
4
1/2 1/6 3/6 -5/10
【样例输出】
1/6
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#分母
q = []
q.append(k)
q.append(l)
return q
def huajian(k , 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)
n = int(input())
a = input().split()
x , y = [] , []
for i in a:
c , m = i.split('/')
x.append(int(c))#分子的集合
y.append(int(m))#分母的集合
s = rational(x[0] , y[0] , x[1] , y[1]).add()
for i in range(2, n):
s = rational(s[0], s[1], x[i], y[i]).add()
print(huajian(s[0], s[1] * n))