欧几里得算法(辗转相除法)-- 实现分数计算
欧几里得,算法,辗转,除法,实现,分数,计算
·
浏览次数 : 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)
与欧几里得算法(辗转相除法)-- 实现分数计算相似的内容: