L1-009 N个数求和 (20 分)
摘要
Title: L1-009 N个数求和 (20 分)
Tag: gcd
Memory Limit: 64 MB
Time Limit: 1000 ms
Powered by:NEFU AB-IN
L1-009 N个数求和 (20 分)
-
题意
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。
-
思路
注意:在python里,负数整除正数会得负数
比如 ,而在c++中所以为了习惯,在判定条件时习惯加上abs
-
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36def gcd(a, b):
return gcd(b, a % b) if b else a
n = int(input())
lst = input().split()
f = []
ans = 0
fm = 1
fz = 0
for s in lst:
x, y = map(int, s.split("/"))
d = gcd(x, y)
x //= d
y //= d
# ans += x // y
# x -= (x // y) * y
fm = y // gcd(fm, y) * fm
f.append([x, y])
# print(f)
for i in range(n):
f[i][0] *= fm // f[i][1]
fz += f[i][0]
d = gcd(fz, fm)
fz //= d
fm //= d
if fz % fm == 0:
print(fz // fm)
elif abs(fz) // fm:
print(fz // fm, f"{fz - fm * (fz // fm)}/{fm}")
else:
print(f"{fz}/{fm}")