题目描述
从键盘读入一个求和算式,求出多个分数的和,结果也用分数表达,并约分到最简形式。
如,从键盘读入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)}')