分数求和 计蒜客 Python

题目

题目描述

蒜头君有 n 个分数并想对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为 1;若最终结果的分母为 1,则直接用整数表示。

如:5/6、10/3 均是最简形式,而 3/6 需要化简为 1/2, 3/1 需要化简为 3。

分子和分母均不为 0,也不为负数。

输入格式

第一行是一个整数 n,表示分数个数,1 ≤ n ≤ 10;

接下来 n 行,每行一个分数,用 “p/q” 的形式表示,不含空格,p,q 均不超过 1010。

输出格式

输出只有一行,即最终结果的最简形式。若为分数,用 “p/q” 的形式表示。

样例输入

2
1/2
1/3

样例输出

5/6

解题

思路分析

  1. 分数求和之前,若分母不同,则需要进行通分
    • 通分需要得到两个分母的最小公倍数
    • 然后以最小公倍数分别除以分母得到系数
    • 各自系数乘以分子相加后得到求和后的分子;分母即为最小公倍数
  2. 分数求和之后,需要约分成最简形式
    • 约分需要知道两个分母的最大公约数
    • 如果分子可以整除分母,则通过整除约分得到整数形式。
  3. 因此得到需求条件:
    • 最大公约数(利用辗转相除法)
    • 最小公倍数(两数之积除以两数最大公约数)

代码实现

辗转相除法求最大公约数
def zzxc(m, n):
    max_v = max(m, n)
    min_v = min(m, n)
    r = max_v % min_v
    while r != 0:
        max_v = min_v
        min_v = r
        r = max_v % min_v
    return min_v
分数相加
def fenshu(m, n):
    m_fz, m_fm = map(int, m.split('/'))
    n_fz, n_fm = map(int, n.split('/'))
    max_gb = zzxc(m_fm, n_fm)
    min_gy = m_fm * n_fm // max_gb
    m_xs = min_gy // m_fm
    n_xs = min_gy // n_fm
    new_fz = m_fz * m_xs + n_fz * n_xs
    yf_xs = zzxc(new_fz, min_gy)
    new_fz //= yf_xs
    min_gy //= yf_xs
    return str(new_fz) + '/' + str(min_gy)
根据题意进行运算
n = int(input())
ls = []
for i in range(0, n):
    ls.append(input())
for i in range(0, n - 1):
    ls[0] = fenshu(ls[0], ls[1])
    del ls[1]
fz, fm = map(int, ls[0].split('/'))
if fz % fm == 0:
    print(fz // fm)
else:
    print(str(fz) + '/' + str(fm))
完整代码
def zzxc(m, n):
    max_v = max(m, n)
    min_v = min(m, n)
    r = max_v % min_v
    while r != 0:
        max_v = min_v
        min_v = r
        r = max_v % min_v
    return min_v


def fenshu(m, n):
    m_fz, m_fm = map(int, m.split('/'))
    n_fz, n_fm = map(int, n.split('/'))
    max_gb = zzxc(m_fm, n_fm)
    min_gy = m_fm * n_fm // max_gb
    m_xs = min_gy // m_fm
    n_xs = min_gy // n_fm
    new_fz = m_fz * m_xs + n_fz * n_xs
    yf_xs = zzxc(new_fz, min_gy)
    new_fz //= yf_xs
    min_gy //= yf_xs
    return str(new_fz) + '/' + str(min_gy)


n = int(input())
ls = []
for i in range(0, n):
    ls.append(input())
for i in range(0, n - 1):
    ls[0] = fenshu(ls[0], ls[1])
    del ls[1]
fz, fm = map(int, ls[0].split('/'))
if fz % fm == 0:
    print(fz // fm)
else:
    print(str(fz) + '/' + str(fm))
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 在 Python 中,可以使用 `fractions` 模块来进行分数运算。该模块提供了 `Fraction` 类来表示分数,可以进行加、减、乘、除等运算。 下面是一个示例代码,演示如何使用 `fractions` 模块进行分数求和: ```python from fractions import Fraction # 定义两个分数 a = Fraction(1, 2) b = Fraction(3, 4) # 求和 c = a + b # 输出结果 print(c) # 输出 5/4 ``` 在上面的代码中,我们首先导入了 `fractions` 模块,然后分别定义了两个分数 `a` 和 `b`,分别为 1/2 和 3/4。接着,我们使用加号运算符对它们进行求和,将结果赋值给变量 `c`。最后,我们输出了求和结果 `c`,它的值为 5/4。 如果要求多个分数的和,可以使用循环来依次累加。下面是一个示例代码,演示如何求多个分数的和: ```python from fractions import Fraction # 定义一个分数列表 fractions = [ Fraction(1, 2), Fraction(3, 4), Fraction(1, 3), Fraction(2, 5), ] # 求和 s = sum(fractions) # 输出结果 print(s) # 输出 37/30 ``` 在上面的代码中,我们首先定义了一个分数列表 `fractions`,包含了四个分数。然后,我们使用内置函数 `sum` 对它们进行求和,将结果赋值给变量 `s`。最后,我们输出了求和结果 `s`,它的值为 37/30。 ### 回答2: Python 中可以使用 Fraction 模块来处理分数计算。首先需要导入 Fraction 模块,然后可以使用 Fraction 类来创建分数对象。例如,Fraction(1,3) 表示 1/3 分数。 要进行分数求和,可以使用 Fraction 类中的加法操作符来实现。在将所有分数相加之前,可以先创建一个初始值为 0 的 Fraction 对象作为结果变量。然后遍历所有分数,将每个分数都加到结果变量中。最后输出结果变量。 下面是一个计算分数求和的示例代码: ```python from fractions import Fraction def sum_of_fractions(fractions): result = Fraction(0,1) for fraction in fractions: result += fraction return result fractions = [Fraction(1,3), Fraction(1,4), Fraction(1,6)] sum_result = sum_of_fractions(fractions) print(sum_result) ``` 以上代码中,我们定义了一个 sum_of_fractions 函数,它接受一个分数列表作为参数。函数内部创建了一个初始值为 0 的 Fraction 对象 result,然后将每个分数都加到 result 中。最后返回计算结果。在主程序中,我们定义了一个 fractions 列表,并将一些分数添加到其中。然后调用 sum_of_fractions 函数计算分数求和,并将结果打印出来。 以上就是用 Python 计算分数求和的方法。希望对你有帮助! ### 回答3: 要使用 Python 求解分数的和,可以使用 Python 内置的分数模块 `fractions`。 首先,需要导入 `fractions` 模块:`import fractions` 然后,可以使用 `fractions.Fraction` 创建分数对象,并进行相加操作。 例如,我们想求解 1/4、1/3 和 2/5 三个分数的和: ``` import fractions # 创建分数对象 frac1 = fractions.Fraction(1, 4) frac2 = fractions.Fraction(1, 3) frac3 = fractions.Fraction(2, 5) # 求解分数的和 sum_frac = frac1 + frac2 + frac3 # 打印结果 print(sum_frac) ``` 运行上述代码,将会输出分数的和。在这个例子中,输出的结果为 29/60。 需要注意的是,Python 的 `fractions` 模块会自动进行约分,所以不需要担心结果没有进行化简。 除了求和之外,`fractions` 模块还提供了其他常用的分数操作,如减法、乘法、除法、取倒数、比较大小等。可以根据具体需求进行操作。 希望以上回答能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AYO_YO

老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值