1034. 有理数四则运算(20) python篇

- 日理万妓 2022-06-18 00:42 294阅读 0赞

1034. 有理数四则运算(20)

时间限制

200 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

CHEN, Yue

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

输入格式:

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

输出格式:

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

输入样例1:

  1. 2/3 -4/2

输出样例1:

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

输入样例2:

  1. 5/3 0/6

输出样例2:

  1. 1 2/3 + 0 = 1 2/3
  2. 1 2/3 - 0 = 1 2/3
  3. 1 2/3 * 0 = 0
  4. 1 2/3 / 0 = Inf
  5. def f(x):
  6. a=x.split("/")
  7. if int(a[0])==0:
  8. return "0"
  9. fenzi=int(a[0])//g(int(a[0]),int(a[1]))
  10. fenmu=int(a[1])//g(int(a[0]),int(a[1]))
  11. flag=0
  12. if fenzi<0:
  13. flag=1
  14. if abs(fenzi)>=fenmu:
  15. if fenzi%fenmu==0:
  16. if flag==0:
  17. b=str(fenzi//fenmu)
  18. else:
  19. b="("+str(fenzi//fenmu)+")"
  20. else:
  21. if flag==0:
  22. b=str(fenzi//fenmu)+" "+str(fenzi%fenmu)+"/"+str(fenmu)
  23. else:
  24. b="(-"+str(fenzi*(-1)//fenmu)+" "+str(fenzi*(-1)%fenmu)+"/"+str(fenmu)+")"
  25. else:
  26. if flag==0:
  27. b=str(fenzi)+"/"+str(fenmu)
  28. else:
  29. b="("+str(fenzi)+"/"+str(fenmu)+")"
  30. return b
  31. def g(i,j):
  32. i=abs(i)
  33. if i<j:
  34. t=i
  35. i=j
  36. j=t
  37. d=i%j
  38. while d!=0:
  39. i=j
  40. j=d
  41. d=i%j
  42. return j
  43. n=input().split()
  44. a=n[0].split("/")
  45. b=n[1].split("/")
  46. fenzi1=int(a[0])
  47. fenmu1=int(a[1])
  48. fenzi2=int(b[0])
  49. fenmu2=int(b[1])
  50. res_jia=str(fenzi1*fenmu2+fenzi2*fenmu1)+"/"+str(fenmu1*fenmu2)
  51. res_jian=str(fenzi1*fenmu2-fenzi2*fenmu1)+"/"+str(fenmu1*fenmu2)
  52. res_chen=str(fenzi1*fenzi2)+"/"+str(fenmu1*fenmu2)
  53. if fenzi2==0:
  54. res_chu="Inf"
  55. else:
  56. res_chu=str(fenzi1*fenmu2)+"/"+str(fenmu1*fenzi2)
  57. print("%s + %s = %s"%(f(n[0]),f(n[1]),f(res_jia)))
  58. print("%s - %s = %s"%(f(n[0]),f(n[1]),f(res_jian)))
  59. print("%s * %s = %s"%(f(n[0]),f(n[1]),f(res_chen)))
  60. if fenzi2!=0:
  61. print("%s / %s = %s"%(f(n[0]),f(n[1]),f(res_chu)))
  62. else:
  63. print("%s / %s = %s"%(f(n[0]),f(n[1]),res_chu))

感觉自己写的代码太长了,定义了两个函数,一个用于把假分数转化为真分数,一个是辗转相除法求分子分母的最大公约数来得到最简分数。。。

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读

    相关 有理数四则运算

    本题要求编写程序,计算 2 个有理数的和、差、积、商。 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围

    相关 1034. 有理数四则运算(20)

    本题要求编写程序,计算2个有理数的和、差、积、商。 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数