鱼C论坛

 找回密码
 立即注册
查看: 1743|回复: 2

求解最大公因数

[复制链接]
发表于 2023-9-7 12:04:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def mous(maxn, minn):
    maxn = max(abs(maxn),abs(minn))
    minn = min(abs(maxn),abs(minn))
    while True:
        if  maxn // 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-7 12:07:16 | 显示全部楼层
单打印结果是-0.5/1.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表