PTA基础编程题目集 之 Python解法(7-33)

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)}')

发布了47 篇原创文章 · 获赞 2 · 访问量 1028

猜你喜欢

转载自blog.csdn.net/Weary_PJ/article/details/104015900
今日推荐