欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > >内容正文

python

【python】pat-凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 20 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 【python】pat-1034 有理数四则运算 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 题目

2. 代码

2.1 分析

题目本身不难。但是我前前后后花了2h以上。

题目需要处理的判断逻辑还是比较多的。

我通过实现一个fraction的类来完成了题目。

关于最后一个测试点,非常有可能是类似这样的结构 。

1/2 -1/2, 这两个分数相除,分母会出现负数,所以一定要处理妥当。

否则最后一个测试点过不了。

2.2 代码

class fraction():# 默认分母=1,且是正数(flag=""正数,flag="-"负数)def __init__(self, top, bottom=1):is_positive = 1if top*bottom < 0:is_positive = -1# 全都转化成正数top, bottom = abs(top), abs(bottom)# 分子分母化简max_factor = gcd(top, bottom)if bottom != 0:# 约分self.num = is_positive * (top//max_factor)self.den = bottom // max_factorelse:# 分母为0,分式没有意义self.num = 0self.den = 0# 显示数据def show(self):num, den = self.num, self.den# 判断是否是正数is_positive = 1if num*den < 0:is_positive = -1# 全部转化成正数num, den = abs(num), abs(den)# 分母为0if den == 0:return "inf"# 分子为0if num == 0:return 0# 分母为1if den == 1:if is_positive == 1:return "%d" % (num)else:return "(-%d)" % (num)# 最简化有理数int_num = num // dennum = num % denif int_num == 0:# 正负判定if is_positive != 1:return "(-%d/%d)" % (num, den)else:return "%d/%d" % (num, den)else:# 正负判定if is_positive != 1:return "(-%d %d/%d)" % (int_num, num, den)else:return "%d %d/%d" % (int_num, num, den)# 加法def __add__(self, other):# 通分x = self.num*other.den self.den*other.numy = self.den * other.denmax_factor = gcd(abs(x), y)return fraction(x//max_factor, y//max_factor)# 减法def __sub__(self, other):x = self.num*other.den - self.den*other.numy = self.den * other.denmax_factor = gcd(abs(x), y)return fraction(x//max_factor, y//max_factor)# 乘法def __mul__(self, other):x = self.num * other.numy = self.den * other.denmax_factor = gcd(abs(x), y)return fraction(x//max_factor, y//max_factor)# 对应除法( / )def __truediv__(self, other):x = self.num * other.deny = self.den * other.num# 分母为0,没有意义,直接返回if y == 0:return fraction(0, 0)max_factor = gcd(abs(x), abs(y))# 分子、分母 有一个是负数if (x < 0 and y >= 0) or (x >= 0 and y < 0):return fraction(-(abs(x)//max_factor), abs(y)//max_factor)else:return fraction(x//max_factor, y//max_factor)def gcd(x, y):# x,y 必须都是自然数if x < y:x, y = y, xwhile(y != 0):temp = xx = yy = temp % yreturn xx, y = input().split(" ") a1, b1 = tuple(map(int, x.split("/"))) a2, b2 = tuple(map(int, y.split("/")))x = fraction(a1, b1) y = fraction(a2, b2)print(x.show(), " ", y.show(), "=", (xy).show()) print(x.show(), "-", y.show(), "=", (x-y).show()) print(x.show(), "*", y.show(), "=", (x*y).show()) print(x.show(), "/", y.show(), "=", (x/y).show())

3. ac截图

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的【python】pat-1034 有理数四则运算的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图