PAT 乙级 1034 有理数四则运算 python

题目
在这里插入图片描述
在这里插入图片描述
思路
题目不难,主要是要考虑输出形式的最简代分数。
很繁琐,主要是利用最大公约数对假分数进行化简
代码


def max_gongyue(a, b):
    while (b != 0):
        temp = a % b
        a = b
        b = temp
    return a


def jia_fenshu(a_fenzi,a_fenmu):
    a_int=0
    gongyue=max_gongyue(abs(a_fenzi),a_fenmu)
    a_fenzi=int(a_fenzi/gongyue)
    a_fenmu=int(a_fenmu/gongyue)
    a_int = int(a_fenzi / a_fenmu)

    if a_fenzi==0:
        return '0'
    if a_int==0:
        if a_fenzi<0 or a_fenmu<0:
            return '('+str(a_fenzi)+'/'+str(a_fenmu)+')'
        else:
            return str(a_fenzi) + '/' + str(a_fenmu)

    if a_int>0:
        a_fenzi = abs(a_fenzi) -  abs(a_int)*a_fenmu
        if a_fenzi==0:
            return str(a_int)
        else:
            return str(a_int)+' '+ str(abs(a_fenzi)) + '/' + str(a_fenmu)
    if a_int<0 :
        a_fenzi = abs(a_fenzi) - abs(a_int)*a_fenmu
        if a_fenzi==0:
            return '('+str(a_int)+')'
        else:
            return '('+str(a_int)+' '+ str(abs(a_fenzi)) + '/' + str(a_fenmu)+')'


import sys
a,b=sys.stdin.readline().split(' ')
a_fenzi,a_fenmu=map(int,a.split('/'))
b_fenzi,b_fenmu=map(int,b.split('/'))

jia_fenzi=b_fenmu*a_fenzi+b_fenzi*a_fenmu
jia_fenmu=b_fenmu*a_fenmu

jian_fenzi=b_fenmu*a_fenzi-b_fenzi*a_fenmu
jian_fenmu=b_fenmu*a_fenmu

cheng_fenzi=a_fenzi*b_fenzi
cheng_fenmu=b_fenmu*a_fenmu

chu_fenzi=a_fenzi*b_fenmu
chu_fenmu=b_fenzi*a_fenmu


print(jia_fenshu(a_fenzi,a_fenmu),'+',jia_fenshu(b_fenzi,b_fenmu),'=',jia_fenshu(jia_fenzi,jia_fenmu))
print(jia_fenshu(a_fenzi,a_fenmu),'-',jia_fenshu(b_fenzi,b_fenmu),'=',jia_fenshu(jian_fenzi,jian_fenmu))
print(jia_fenshu(a_fenzi,a_fenmu),'*',jia_fenshu(b_fenzi,b_fenmu),'=',jia_fenshu(cheng_fenzi,cheng_fenmu))
if chu_fenmu!=0:

    print(jia_fenshu(a_fenzi,a_fenmu),'/',jia_fenshu(b_fenzi,b_fenmu),'=',jia_fenshu(chu_fenzi,chu_fenmu))
else:
    print(jia_fenshu(a_fenzi, a_fenmu), '/', jia_fenshu(b_fenzi, b_fenmu), '=', 'Inf')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值