PTA基础编程题目集 之 Python解法(7-33)
7-33 有理数加法 (15分)
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
a, b = input().split()
a1, b1 = map(int, a.split('/'))
a2, b2 = map(int, b.split('/'))
def gcd(x, y):
x1 = max(x, y)
y1 = min(x, y)
if y1 == 0:
return x1
return gcd(y1, x1 % y1)
def lcm(x, y):
return x * y / gcd(x, y)
# 第一步 求出分母的最小公倍数(lcm)
b = lcm(b1, b2)
# 第二步 两个分数转化成相同分母,相加
ka = b / b1
kb = b / b2
a = ka * a1 + kb * a2
# 第三步 求新分数 分子分母的最大公约数(gcd)
# 新分数为a/b
gb = gcd(a, b)
# 第四步 化简输出
if gb == b:
print(int(a / b))
else:
print(f'{int(a / gb)}/{int(b / gb)}')