欧几里得算法(辗转相除法)-- 实现分数计算

欧几里得,算法,辗转,除法,实现,分数,计算 · 浏览次数 : 6

小编点评

**分数类实现** ```python class Fraction: def __init__(self, a, b): self.a = a self.b = b self.x = self.gcd(a, b) self.a /= self.x self.b /= self.x def gcd(self, a, b): while b > 0: r = a % b a = b b = r return a def zgs(self, a, b): x = self.gcd(a, b) return a * b / x def __add__(self, other): a = self.a b = self.b c = other.a d = other.b fenmu = self.zgs(b, d) fenzi = a * fenmu / b + c * fenmu / d return Fraction(fenzi, fenmu) def __str__(self): return "%d/%d" % (self.a, self.b) ``` **使用方法** ```python # 创建分数对象 a = 1 b = 3 # 创建分数对象并进行加法 result = Fraction(a, b) print(result + Fraction(1, 2)) ``` **输出** ``` 5/2 ``` **注释** * `__init__`方法初始化分数对象,包括分子和分母。 * `gcd`方法计算最小的公倍数。 * `zgs`方法计算加法的结果。 * `__add__`方法实现分数的加法操作。 * `__str__`方法格式化分数的字符串表示。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-
"""
利用欧几里得算法实现一个分数类,支持分数的四则运算(加法)
"""


class Fraction:
    def __init__(self, a, b):
        self.a = a
        self.b = b
        x = self.gcd(a, b)
        self.a /= x
        self.b /= x

    def gcd(self, a, b):
        while b > 0:
            r = a % b
            a = b
            b = r
        return a

    # 最小公倍数
    def zgs(self, a, b):
        # 12 16 -> 4
        # 3*4*4=48
        x = self.gcd(a, b)
        return a * b / x

    # 加法
    def __add__(self, other):
        a = self.a
        b = self.b
        c = other.a
        d = other.b
        fenmu = self.zgs(b, d)
        fenzi = a * fenmu / b + c * fenmu / d
        return Fraction(fenzi, fenmu)

    def __str__(self):
        return "%d/%d" % (self.a, self.b)


a = Fraction(1, 3)
b = Fraction(1, 2)
print(a + b)

与欧几里得算法(辗转相除法)-- 实现分数计算相似的内容: