L1-009 N个数求和 (20 分)

摘要
Title: L1-009 N个数求和 (20 分)
Tag: gcd
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

L1-009 N个数求和 (20 分)

  • 题意

    本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

  • 思路

    注意:在python里,负数整除正数会得负数
    比如 1//20=1-1 // 20 = -1,而在c++中1/20=0-1 / 20 = 0

    所以为了习惯,在判定条件时习惯加上abs

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    def gcd(a, b):
    return gcd(b, a % b) if b else a


    n = int(input())
    lst = input().split()

    f = []
    ans = 0
    fm = 1
    fz = 0
    for s in lst:
    x, y = map(int, s.split("/"))
    d = gcd(x, y)
    x //= d
    y //= d
    # ans += x // y
    # x -= (x // y) * y
    fm = y // gcd(fm, y) * fm
    f.append([x, y])

    # print(f)

    for i in range(n):
    f[i][0] *= fm // f[i][1]
    fz += f[i][0]
    d = gcd(fz, fm)
    fz //= d
    fm //= d

    if fz % fm == 0:
    print(fz // fm)
    elif abs(fz) // fm:
    print(fz // fm, f"{fz - fm * (fz // fm)}/{fm}")
    else:
    print(f"{fz}/{fm}")
使用搜索:谷歌必应百度