davidmou 发表于 2023-9-7 12:04:07

求解最大公因数

def mous(maxn, minn):
    maxn = max(abs(maxn),abs(minn))
    minn = min(abs(maxn),abs(minn))
    while True:
      ifmaxn // minn == maxn /minn:
            
            return minn
            break
      else:
            minn = maxn % minn
class fenshu():
    def __init__(self,nem , den):
      self.nem = nem
      self.den = den

      if self.den < 0:
            self.nem = -nem
            self.den = -den

      self.nem = self.nem / mous(self.nem,self.den)
      self.den = self.den / mous(self.nem, self.den)

    def __str__(self):
      return str(self.nem) + "/"+str(self.den)
    def __add__(self, other):
      result_den = self.den * other.den
      result_nem = self.nem * other.den + other.nem * self.den
      result_den = result_den / mous(max(result_den, result_nem), min(result_den, result_nem))
      result_nem = result_nem / mous(max(result_den, result_nem), min(result_den, result_nem))
      return str(result_nem) + "/" + str(result_den)
    def __sub__(self, other):
      result_den = self.den * other.den
      result_nem = self.nem * other.den - other.nem * self.den
      result_den = result_den / mous(max(result_den, result_nem), min(result_den, result_nem))
      result_nem = result_nem / mous(max(result_den, result_nem), min(result_den, result_nem))
      return str(result_nem) + "/" + str(result_den)


   
    def __eq__(self, other):
      
      self.result =self.nem * other.den
      other.result = other.nem* self.den
      if self.result == other.result:
            print("good")
      else:
            print("wrong")
    def get_den(self):
      print(self.den)
    def get_nem(self):
      print(self.nem)
   

   

a = fenshu(-4,8)
print(a)
问一下为什么打印结果是-0.5/1.0
而不是-1/2.0

isdkz 发表于 2023-9-7 12:04:29

在代码中, mous 函数用于计算两个数的最大公因数。然后,在 fenshu 类的构造函数中,通过调用 mous 函数来将分子和分母进行约分。这样做是为了确保分数被化简为最简形式。

在打印结果时,我们可以看到 a 对象的分子为-0.5,分母为1.0。这是因为在构造函数中,我们将分子和分母分别除以它们的最大公因数来进行约分。在这种情况下,-4和8的最大公因数为4,所以分子-4除以4得到-1,分母8除以4得到2。因此,打印结果是-1/2.0。

如果你希望打印结果是整数形式的分数,你可以对打印结果进行处理,将分母为1的情况特殊处理,例如将分子和分母都转换为整数类型,并判断分母是否为1,如果是,则只打印分子部分。以下是修改后的代码示例:

class fenshu():
    def __init__(self,nem , den):
      self.nem = nem
      self.den = den

      if self.den < 0:
            self.nem = -nem
            self.den = -den

      gcd = mous(self.nem, self.den)
      self.nem = int(self.nem / gcd)
      self.den = int(self.den / gcd)

    def __str__(self):
      if self.den == 1:
            return str(self.nem)
      else:
            return str(self.nem) + "/" + str(self.den)

a = fenshu(-4, 8)
print(a)


这样修改后,打印结果将是 -1/2 。

davidmou 发表于 2023-9-7 12:07:16

单打印结果是-0.5/1.0{:9_224:}
页: [1]
查看完整版本: 求解最大公因数