1339: 【提高】求多个分数的和——最小公倍数、最大公约数

题目描述
从键盘读入一个求和算式,求出多个分数的和,结果也用分数表达,并约分到最简形式。
如,从键盘读入1/12+5/12+1/3,则输出:5/6

输入格式
分数求和表达式

输出格式
和的分数形式

输入样例
1/12+5/12+1/3

输出样例
5/6

数据范围与提示
注意考虑多个分数的和为整数的情况如:1/3+1/3+1/3=1

最小公倍数

import math
def Least_common_multiple(num):  # 求任意多个数的最小公倍数
    minimum = 1
    for i in num:
        minimum = int(i)*int(minimum) / math.gcd(int(i), int(minimum))
    return int(minimum)
 

最大公约数

import math
def Maximum_common_divisor(num):  # 求任意多个数的最大公约数
    minimum = max(num)
    for i in num:
        minimum = math.gcd(int(i), int(minimum))
    return int(minimum)
    

程序实现

ls2=[]
fz=[]
fm=[]
str1=''
s=0
 
import math
def Least_common_multiple(num):  # 求任意多个数的最小公倍数
    minimum = 1
    for i in num:
        minimum = int(i)*int(minimum) / math.gcd(int(i), int(minimum))
    return int(minimum)
 
import math
def Maximum_common_divisor(num):  # 求任意多个数的最大公约数
    minimum = max(num)
    for i in num:
        minimum = math.gcd(int(i), int(minimum))
    return int(minimum)
 
ls=input().split('+')
for i in ls:
    box=i.split('/')
    ls2.append(box)
 
for i in ls2:
    fm.append(i[1])
 
lcm=Least_common_multiple(fm)
 
for i in ls2:
    z=(lcm/int(i[1]))*int(i[0])
    fz.append(int(z))
 
for i in fz:
    s+=i
 
str1=str(s)+'/'+str(lcm)
 
'''1/12+5/12+1/3
    >>>10/12 需要约分
'''
mcd=Maximum_common_divisor((s,lcm))
s//=mcd
lcm//=mcd
 
'''注意考虑多个分数的和为整数的情况如:1/3+1/3+1/3=1'''
if s%lcm==0:
    print(s//lcm)
else:
    print(f'{str(s)}/{str(lcm)}')
 
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值