1

我正在编写自己的 Rational 类版本,我想递归地使用最大公约数。我需要考虑负数 - 我总是想在分子中表示我的负数,所以假设 num=1 和 denom=-2,我想将其表示为 num=-1 和 denom=2 并且如果 num=-1 且 denom=-2 则 num=1 且 denom=2。我知道我需要使用 abs 函数来查找 gcd 但如果我删除负号以找到 gcd 我需要将其放回......这就是我到目前为止......

def gcd(a,b):

    '''Greatest common divisor function
    (a and b are integers)'''
    if b==0:
        return a
    else:
        return gcd(b,a%b)

class Rational:

    def __init__(self,a=0,b=1):

        '''Constructor for Rational'''
        if b==0:
            return 'Denominator cannot be zero.'
        else:
            g=gcd(abs((a,b))
            self.n=a/g       
            self.d=b/g
            # I need to 'undo' the abs to get my self.n and self.d- 
                if that makes sense!!
4

1 回答 1

2

你可以做

self.n = abs(a/g)
self.m = abs(b/g)
if a*b < 0:  # i.e. signs are different 
    self.n = -self.n
于 2013-07-29T16:33:12.587 回答