Python
注意:
1、求最大公约数,需用辗转相除法,否则最后两个测试点超时
2、未解决问题,第三个测试点未通过
# coding=gbk
import math
line = raw_input().split()
a1= long(line[0].split('/')[0])
b1= long(line[0].split('/')[1])
a2= long(line[1].split('/')[0])
b2= long(line[1].split('/')[1])
def fractionReduction(a,b):
if a<0:
maxCF=maximumCommonFactor2(-a, b)
else:
maxCF=maximumCommonFactor2(a, b)
a=a/maxCF
b=b/maxCF
return a,b
#由于due to fractionReduction, no longer need LCM
# def leastCommonMultiple(b1,b2):
# if b1<b2:
# temp=b1
# b1=b2
# b2=temp
# for leastCM in xrange(b1,b1*b2+1,1):
# if leastCM%b1==0 and leastCM%b2==0:
# return leastCM
# def maximumCommonFactor(a,b):
# maxCF=1
# for i in xrange(1,min(a,b)+1):
# if a%i==0 and b%i==0:
# maxCF=i
# return maxCF
###########################################
def maximumCommonFactor2(a,b):
r=a%b
while r:
a=b
b=r
r=a%b
return b
###########################################
def getSimple_C_A_B(a,b): #attention: Python -8/6=-2, -8%6= 4
if a>0:
c=a/b
a=a%b
elif a==0 and b==0:
return 0,0,0
else:
c=(-a)/b
c=-c
a=(-a)%b
if c==0:
a=-a
return c,a,b
def add(a1,b1,a2,b2):
b3=b1*b2
a3 = a1*b2+a2*b1
a3,b3=fractionReduction(a3,b3)
return a3,b3
def minus(a1,b1,a2,b2):
b3=b1*b2
a3 = a1*b2-a2*b1
a3,b3=fractionReduction(a3,b3)
return a3,b3
def multiply(a1,b1,a2,b2):
a3=a1*a2
b3=b1*b2
a3,b3=fractionReduction(a3,b3)
return a3,b3
def divide(a1,b1,a2,b2):
a3=a1*b2
b3=b1*a2
if b3==0:
return 0,0
if b3<0:
a3=-a3
b3=-b3
a3,b3=fractionReduction(a3,b3)
return a3,b3
def myPrintUnit(c_print,a_print,b_print):
s=''
if c_print>0:
s+=str(c_print)
if a_print!=0:
s+=' '
elif c_print<0:
s+='('
s+=str(c_print)
if a_print!=0:
s+=' '
else:
s+=')'
if a_print>0:
s+=str(a_print)
s+='/'
s+=str(b_print)
if c_print<0:
s+=')'
elif a_print<0:
s+='('
s+=str(a_print)
s+='/'
s+=str(b_print)
s+=')'
if c_print==0 and a_print==0:
s='0'
return s
#pUnit1, pUnit2
c1_print,a1_print,b1_print=getSimple_C_A_B(a1,b1)
c2_print,a2_print,b2_print=getSimple_C_A_B(a2,b2)
pUnit1= myPrintUnit(c1_print, a1_print, b1_print)
pUnit2= myPrintUnit(c2_print, a2_print, b2_print)
#+
a3_add,b3_add=add(a1,b1,a2,b2)
c3_add_print,a3_add_print,b3_add_print=getSimple_C_A_B(a3_add,b3_add)
pUnit3_add= myPrintUnit(c3_add_print, a3_add_print, b3_add_print)
#-
a3_minus,b3_minus=minus(a1, b1, a2, b2)
c3_minus_print,a3_minus_print,b3_minus_print=getSimple_C_A_B(a3_minus, b3_minus)
pUnit3_minus=myPrintUnit(c3_minus_print, a3_minus_print, b3_minus_print)
#*
a3_multi,b3_multi=multiply(a1, b1, a2, b2)
c3_multi_print,a3_multi_print,b3_multi_print=getSimple_C_A_B(a3_multi, b3_multi)
pUnit3_multi=myPrintUnit(c3_multi_print, a3_multi_print, b3_multi_print)
#/
a3_divi,b3_divi=divide(a1, b1, a2, b2)
if b3_divi==0:
pUnit3_divi='Inf'
else:
c3_divi_print,a3_divi_print,b3_divi_print=getSimple_C_A_B(a3_divi, b3_divi)
pUnit3_divi =myPrintUnit(c3_divi_print, a3_divi_print, b3_divi_print)
print pUnit1+' + '+pUnit2+' = '+pUnit3_add
print pUnit1+' - '+pUnit2+' = '+pUnit3_minus
print pUnit1+' * '+pUnit2+' = '+pUnit3_multi
print pUnit1+' / '+pUnit2+' = '+pUnit3_divi