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
相关文章推荐
- Find Peak Element
- Windows程序中的字符编码问题
- DeskArtes.Design.Expert.Series.v7.0.WiN32 1CD(专业3D造型CAD辅助设计软件)
- Analist.2015.Win32_64 2CD(土地测量及三维曲面建模的软件)
- 美化的下拉框select2
- CPU的高速缓存存储器的理解
- 写在毕业季——纪念博士即将毕业
- 2015/5/9站立会议(补发)
- CTP: 接收心跳超时Bug
- 二叉树系列:初探二叉树,c语言实现
- iOS_小问题积累(类中c语言函数的调用)
- CentOS 安装Oracle 11g R2
- IOS_核心动画 CoreAnimation
- RedHat Linux RPM方式安装MySQL5.6
- leetCode(23):Binary Tree Zigzag Level Order Traversal
- 【20150622 】sqlldr及ctl文件
- Androidclient和server第一种方法端数据交换
- leetCode(23):Binary Tree Zigzag Level Order Traversal 分类: leetCode 2015-06-22 10:08 127人阅读 评论(0) 收藏
- android的activity总结
- Effective Objective-C 2.0之Note.01