题目描述
本题要求编写程序,计算2个有理数的和、差、积、商。
输入描述:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分
母不为0。
输出描述:
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的
最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中
没有超过整型范围的整数。
输入例子:
5/3 0/6
输出例子:
1 2/3 + 0 = 1 2/3
1 2/3 - 0 = 1 2/3
1 2/3 * 0 = 0
1 2/3 / 0 = Inf
Python:
def gcd(a,b):
m = max(a,b)
n = min(a,b)
while(n!=0):
r = m%n
m = n
n = r
#print(m)
return m
a = input().split()
a[0] = a[0].split('/')
a[1] = a[1].split('/')
a[0] = [int(i) for i in a[0]]
a[1] = [int(i) for i in a[1]]
b = gcd(abs(a[0][0]),abs(a[0][1]))
a[0][0],a[0][1] = int(a[0][0]/b),int(a[0][1]/b)
b = gcd(abs(a[1][0]),abs(a[1][1]))
a[1][0],a[1][1] = int(a[1][0]/b),int(a[1][1]/b)
b = [0,0,0,0,0,0]
c = [0,0,0]
b[0] = int(a[0][0]/a[0][1])
b[1] = a[0][0]%a[0][1]
b[2] = a[0][1]
b[3] = int(a[1][0]/a[1][1])
b[4] = a[1][0]%a[1][1]
b[5] = a[1][1]
for i in ['+','-','*','/']:
if b[0] or b[1]:
if b[0]<0:
print('(',end='')
if b[0]:
print(b[0],end='')
if b[0] and b[1]:
print(' ',end='')
if b[1]:
print(str(b[1])+'/'+str(b[2]),end='')
if b[0]<0:
print(')',end='')
print('',i,end=' ')
else:
print('0',i,end=' ')
if b[3] or b[4]:
if b[3]<0:
print('(',end='')
if b[3]:
print(b[3],end='')
if b[3] and b[4]:
print(' ',end='')
if b[4]:
print(str(b[4])+'/'+str(b[5]),end='')
if b[3]<0:
print(')',end='')
print(' ',end='')
print('=',end=' ')
else:
print('0','=',end=' ')
if i=='+':
left = False
num = a[0][0]*a[1][1] + a[0][1]*a[1][0]
if num<0:
num = abs(num)
print('(-',end='')
left = True
if num==0:
print('0')
else:
num2 = a[0][1]*a[1][1]
num3 = gcd(num%num2,num2)
if int(num/num2)!=0:
print(int(num/num2),end='')
if num%num2!=0:
print(' ',end='')
if num%num2!=0:
print(str(int(num%num2/num3))+'/'+str(int(num2/num3)),end='')
if left:
print(')',end='')
print()
elif i=='-':
left = False
num = a[0][0]*a[1][1] - a[0][1]*a[1][0]
if num<0:
num = abs(num)
print('(-',end='')
left = True
if num==0:
print(0)
else:
num2 = a[0][1]*a[1][1]
num3 = gcd(num%num2,num2)
if int(num/num2)!=0:
print(int(num/num2),end='')
if num%num2!=0:
print(' ',end='')
if num%num2!=0:
print(str(int(num%num2/num3))+'/'+str(int(num2/num3)),end='')
if left:
print(')',end='')
print()
elif i=='*':
left = False
num = a[0][0] * a[1][0]
if num<0:
num = abs(num)
print('(-',end='')
left = True
if num==0:
print(0)
else:
num2 = a[0][1] * a[1][1]
num3 = gcd(num,num2)
if int(num/num2)!=0:
print(int(num/num2),end='')
if num%num2!=0:
print(' ',end='')
if num%num2 != 0:
print(str(int(num%num2/num3))+'/'+str(int(num2/num3)),end='')
if left:
print(')',end='')
print()
elif i=='/':
left = False
num = a[0][0]*a[1][1]
num2 = a[0][1]*a[1][0]
if num2==0:
print('Inf')
break
elif (num<0 and num2>0) or (num>0 and num2<0):
print('(-',end='')
left = True
num = abs(num)
num2 = abs(num2)
if num==0:
print(0)
else:
num3 = gcd(num,num2)
if int(num/num2)!=0:
print(int(num/num2),end='')
if num%num2!=0:
print(' ',end='')
if num%num2!=0:
print(str(int(num%num2/num3))+'/'+str(int(num2/num3)),end='')
if left:
print(')',end='')
print()