乙级(Basic Level) 1024 有理数四则运算

题目描述

本题要求编写程序,计算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()

 

posted @ 2018-08-28 15:06  黄冠积  阅读(171)  评论(0编辑  收藏  举报