Python3PTA乙1034有理數四則運算 (完美通過版)

 注意事項:

  1. 減法運算中 ,爲了避免分母前出現負號的情況,在處理時,將所有負數按其絕對值處理。最後再添負號
  2. 除法運算中,0 / 0輸出結果是 Inf。邏輯判斷時 0 / 0容易出現bug
  3. 在判斷正負的時候,別用兩個數乘積來判斷。因爲如果這兩個數過大容易出現結果溢出情況

 

# coding:utf-8
def Num(s):
    N, k, F = 0, 0, 0
    if s[0] == '-':
        F = 1
        s[1:] = s[-1: 0: -1]
        s = s[1:]
    else:
        s[0:] = s[-1:: -1]
    for item in s:
        N += int(item) * 10 ** k
        k += 1
    if F == 0:
        return N
    else:
        return (N * -1)


def GCD(a, b):
    if a < b:
        a, b = b, a
    while b != 0:
        a, b = b, a % b
    return a


def Rationalized(m_a, d_a):  # 有理化
    flag = 0                #flag 爲0表示 分子,分母同號
    if (m_a < 0 and d_a > 0) or (m_a > 0 and d_a < 0):
        flag = 1
        if m_a < 0 and d_a > 0:
            m_a = m_a * (-1)
        if m_a > 0 and d_a < 0:
            d_a = d_a * (-1)
    if d_a == 0:
        return ('Inf')
    elif m_a == 0:
        return ('0')  # 如果返回 (0), 在len()中 (0) 會被當作 int而報錯
    else:
        num = int(m_a / d_a)
        remainder = abs(m_a) % abs(d_a)
        gcd = GCD(remainder, d_a)
        m = int(remainder / gcd)
        d = int(d_a / gcd)
        if num == 0 and m != 0:
            st = (("%d/%d") % (m, d))
        elif num == 0 and m == 0:
            st = ('0')
        elif num != 0 and m == 0:
            st = ("%d" % num)
        else:
            st = ("%d %d/%d" % (num, m, d))
    if flag == 1:
        st = (('(-') + st + (')'))
    return st


s1, s2 = input().split()
Mol_1, Den_1 = s1.split('/')
Mol_2, Den_2 = s2.split('/')
Mol_1 = list(Mol_1)
Den_1 = list(Den_1)
Mol_2 = list(Mol_2)
Den_2 = list(Den_2)

mol_1 = Num(Mol_1)
den_1 = Num(Den_1)
mol_2 = Num(Mol_2)
den_2 = Num(Den_2)
# 操作數與被操作數的有理化
num_1 = Rationalized(mol_1, den_1)
num_2 = Rationalized(mol_2, den_2)

#加
m_a = mol_1 * den_2 + mol_2 * den_1
d_a = den_1 * den_2
num_a = Rationalized(m_a, d_a)
# 打印加法結果
print(num_1 + ' + ' + num_2 + ' = ' + num_a)
# 減
m_a = mol_1 * den_2 - mol_2 * den_1
d_a = den_1 * den_2
num_a = Rationalized(m_a, d_a)
print(num_1 + ' - ' + num_2 + ' = ' + num_a)
# 乘
m_a = mol_1 * mol_2
d_a = den_1 * den_2
num_a = Rationalized(m_a, d_a)
print(num_1 + ' * ' + num_2 + ' = ' + num_a)
# 除
m_a = mol_1 * den_2
d_a = den_1 * mol_2
num_a = Rationalized(m_a, d_a)
print(num_1 + ' / ' + num_2 + ' = ' + num_a)


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章