您的位置:首页 > 其它

PAT(A) 1088. Rational Arithmetic & PAT(B) 1034. 有理数四则运算(20)

2015-06-22 10:11 417 查看
Python注意:1、求最大公约数,需用辗转相除法,否则最后两个测试点超时2、未解决问题,第三个测试点未通过
# coding=gbkimport mathline = 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/maxCFb=b/maxCFreturn 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%bwhile r:a=bb=rr=a%breturn b###########################################def getSimple_C_A_B(a,b): #attention: Python -8/6=-2, -8%6= 4if a>0:c=a/ba=a%belif a==0 and b==0:return 0,0,0else:c=(-a)/bc=-ca=(-a)%bif c==0:a=-areturn c,a,bdef add(a1,b1,a2,b2):b3=b1*b2a3 = a1*b2+a2*b1a3,b3=fractionReduction(a3,b3)return a3,b3def minus(a1,b1,a2,b2):b3=b1*b2a3 = a1*b2-a2*b1a3,b3=fractionReduction(a3,b3)return a3,b3def multiply(a1,b1,a2,b2):a3=a1*a2b3=b1*b2a3,b3=fractionReduction(a3,b3)return a3,b3def divide(a1,b1,a2,b2):a3=a1*b2b3=b1*a2if b3==0:return 0,0if b3<0:a3=-a3b3=-b3a3,b3=fractionReduction(a3,b3)return a3,b3def 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, pUnit2c1_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_addprint pUnit1+' - '+pUnit2+' = '+pUnit3_minusprint pUnit1+' * '+pUnit2+' = '+pUnit3_multiprint pUnit1+' / '+pUnit2+' = '+pUnit3_divi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: