📜  将给定的十进制数转换为不可约的分数(1)

📅  最后修改于: 2023-12-03 15:25:21.866000             🧑  作者: Mango

将给定的十进制数转换为不可约的分数

在数学中,不可约的分数也称为最简分数,它是指分子和分母不再有公共因子,即它已被化简到最简单的形式。

本文介绍如何将一个给定的十进制数转换为不可约的分数。这在编程中经常遇到,比如在金融领域中涉及货币计算,以及在数据科学中的比例计算等等。

算法原理

我们可以利用辗转相除法(或欧几里得算法)来求两个数的最大公约数,然后将分子和分母同时除以最大公约数,就得到一个不可约分数。

具体实现如下:

  1. 将给定的十进制数 num 转化为分数形式,分母为1,分子为 num
  2. 对分子和分母求它们的最大公约数 gcd
  3. 将分子和分母同时除以 gcd,得到不可约的分数。
Python实现

下面是一个Python实现,它使用了递归的方式计算最大公约数。

def decimal_to_fraction(num):
    # 将十进制数转换为分数形式
    numerator = num
    denominator = 1

    # 计算最大公约数
    gcd = get_gcd(numerator, denominator)

    # 化简分数
    numerator //= gcd
    denominator //= gcd

    return (numerator, denominator)


def get_gcd(a, b):
    if b == 0:
        return a
    else:
        return get_gcd(b, a % b)
示例

现在,我们来测试一下上面的实现是否正确。假设我们要将十进制数 0.5 转换为分数形式。

num = 0.5
fraction = decimal_to_fraction(num)
print(f"{num} = {fraction[0]}/{fraction[1]}")

运行结果如下:

0.5 = 1/2

可以看到,0.5 被成功转换为了一个不可约分数 1/2

总结

本文介绍了将给定的十进制数转换为不可约的分数的算法原理和Python实现。这个算法在编程中很有用,因为它可以使我们更容易进行分数计算,并且得到一个简单的形式。