zoukankan      html  css  js  c++  java
  • PAT 有理数四则运算

    本题要求编写程序,计算 2 个有理数的和、差、积、商。

    输入格式:

    输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

    输出格式:

    分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

    输入样例 1:

    2/3 -4/2

    输出样例 1:

    2/3 + (-2) = (-1 1/3)
    2/3 - (-2) = 2 2/3
    2/3 * (-2) = (-1 1/3)
    2/3 / (-2) = (-1/3)

    输入样例 2:

    5/3 0/6

    输出样例 2:

    1 2/3 + 0 = 1 2/3
    1 2/3 - 0 = 1 2/3
    1 2/3 * 0 = 0
    1 2/3 / 0 = Inf
    #将输入的两个分数和计算的结果转化成题目要求的最简形式
    def hjian(fenshu):
        a, b = fenshu.split('/')
        fenzi = int(a)  # 分子
        fenmu = int(b)  # 分母
        mcg=zd(fenzi,fenmu)
        fenzi//=mcg
        fenmu//=mcg
        z = fenzi // fenmu  # 整数部分
        f = fenzi % fenmu  # 分数部分的分子
        if fenzi == 0:
            return '0'
        elif z and f == 0:
            return str(z)
        elif z == 0 and f:
            return str(f) + '/' + str(fenmu)
        elif z and f:
            return str(z) + ' ' + str(f) + '/' + str(fenmu)
    #返回x和y的最大公因数
    def zd(x,y):
        if x<y:
            x,y=y,x
        while y!=0:
            n=x%y
            x,y=y,n
        return x
    a, b = input().strip().split()
    aa0,aa1=int(a.split('/')[0]),int(a.split('/')[1])
    bb0,bb1=int(b.split('/')[0]),int(b.split('/')[1])
    abz,abm=aa0*bb1+aa1*bb0,aa1*bb1  
    ab=str(abz)+'/'+str(abm)   # a+b
    ajbz=aa0*bb1-aa1*bb0
    ajb=str(ajbz)+'/'+str(abm)  # a-b
    acbz=aa0*bb0
    acb=str(acbz)+'/'+str(abm)  # a*b
    aa,bb,cc,dd,ee,ff='','','','','',''
    if a[0] != '-':
        aa=hjian(a)
    else:
        aa=hjian(a[1:])
        aa='('+'-'+aa+')'
    if ab[0]!='-':
        cc=hjian(ab)
    else:
        ab=hjian(ab[1:])
        cc='('+'-'+ab+')'
    if ajb[0]!='-':
        dd=hjian(ajb)
    else:
        ajb=hjian(ajb[1:])
        dd='('+'-'+ajb+')'
    if acb[0]!='-':
        ee=hjian(acb)
    else:
        acb=hjian(acb[1:])
        ee='('+'-'+acb+')'
    if b[0]!='-':
        bb=hjian(b)
    else:
        bb=hjian(b[1:])
        bb='('+'-'+bb+')'
    # print(aa,bb)
    print(aa+' '+'+'+' '+bb+' '+'='+' '+cc)
    print(aa+' '+'-'+' '+bb+' '+'='+' '+dd)
    print(aa+' '+'*'+' '+bb+' '+'='+' '+ee)
    ahb=''
    #除法除数为0的情况
    if bb=='0':
        print(aa+' '+'/'+' '+bb+' '+'='+' '+'Inf')
    else:
        ahbz=aa0*bb1
        ahbm=aa1*bb0
        #如果除数为负,则做除法时,乘除数的倒数,会把符号放到分母上,所以,需要处理一下
        if ahbm<0:
            if ahbz<0:
                ahb=str(abs(ahbz))+'/'+str(abs(ahbm))
            else:
                ahb=str(0-ahbz)+'/'+str(abs(ahbm))
        else:
            ahb=str(ahbz)+'/'+str(ahbm)
        if ahb[0]!='-':
            ff=hjian(ahb)
        else:
            ahb=hjian(ahb[1:])
            ff='('+'-'+ahb+')'
        print(aa+' '+'/'+' '+bb+' '+'='+' '+ff)

    全程稀里糊涂,写了这么多行,快看晕了,终于我把Python代码的优雅和简洁全扔掉了,确实写的很臃肿

  • 相关阅读:
    Web Services开发(Java篇)
    前端UI框架小汇总
    WebService 在C#.NET中的使用
    求n*m网格内矩形的数目
    Silverlight学习笔记(三):控件布局管理
    Silverlight学习笔记(二):创建Hello World 项目(备注)
    ExcelHelp 学习笔记二: C# 往Excel中写入数据
    DataBase 学习笔记一:c#连接SQL数据库
    ExcelHelp 学习笔记一: C#读取Excel中数据
    Silverlight学习笔记(二):创建Hello World 简单基础应用
  • 原文地址:https://www.cnblogs.com/andrew3/p/12709795.html
Copyright © 2011-2022 走看看