class Rational(object):
def __init__(self, p, q):
self.p = p
self.q = q
def gcd(p,q):
if q==0:
return p
return gcd(q,p%q)
self.r=gcd(p,q) #这里为什么要赋值给self.r??为什么赋值给g,或者a之类的不行?这怎么解释???
def __add__(self, r):
return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
def __sub__(self, r):
return Rational(self.p*r.q-r.p*self.q,self.q*r.q)
def __mul__(self, r):
return Rational(self.p*r.p,self.q*r.q)
def __div__(self, r):
return Rational(self.p*r.q,self.q*r.p)
def __str__(self):
return '%s/%s'%(self.p/self.r,self.q/self.r)
__repr__ = __str__
r1 = Rational(1, 2)
r2 = Rational(1, 4)
print r1 + r2
print r1 - r2
print r1 * r2
print r1 / r2这道题,print出来很正常但是我突然想到一个问题,假如带入的是r1 = Rational(120,1)r2 = Rational(45,1),按照gcd()可得-->gcd(120,45)-->gcd(45,120%45)-->gcd(45,30)。到这里,问题来了,最大公约数30,那么带入结果120/45,分子分母同时除以30!!好家伙!!等于4/1.5,除非是可以继续循环的,一直到15为止!再来r1 = Rational(6,1)r2 = Rational(16,1),按照gcd()可得-->gcd(6,16)-->gcd(16,6%16)-->gcd(16,0),即最大公约数等于6,这tm不是打脸吗!!!???小白求大神鞭挞!!!
添加回答
举报
0/150
提交
取消