PTA L1-009 N个数求和 (20 分) "Python3"

mac2022-06-30  24

import enum import os class Fenshu(enum.Enum): Fenzi=0 Fenmu=1 # 辗转相除法 def a(n1,n2): data=max(n1,n2)%min(n1,n2) if data!=0: result=a(min(n1,n2),data) else: return min(n1,n2) return result data=int(input()) # 如果输入为0 直接结束程序 if data==0: print(0) os._exit(0) datas=input().split() # print(datas) dicts=[[]*1000]*1000 # print(dicts) for i in range(data): dicts[i]=datas[i].split("/") # 将字典里的str转换为int 类型 dicts=[[int(x) for x in y]for y in dicts] # print(dicts[0][Fenshu.Fenzi.value]) # g最大公约数 # 计数 count=0 result_fenzi=dicts[count][Fenshu.Fenzi.value] result_fenmu=dicts[count][Fenshu.Fenmu.value] while(True): # first_fenzi=dicts[count][Fenshu.Fenzi.value] # first_fenmu=dicts[count][Fenshu.Fenmu.value] next_fenzi=dicts[count+1][Fenshu.Fenzi.value] next_fenmu=dicts[count+1][Fenshu.Fenmu.value] # 如果分子等于0直接跳过这个数就ojbk了 if next_fenzi!=0: g=a(result_fenmu,next_fenmu) # 得到分子所需的倍数 g1= (result_fenmu/g*next_fenmu)/result_fenmu g2=(next_fenmu/g*result_fenmu)/next_fenmu result_fenzi = result_fenzi * g1 + next_fenzi * g2 # 如果出现 前面一个数和后面一个数相加等于0 跳过这两个数从第三个数开始循环,如果没有第三个数 直接赋值 跳出循环 if result_fenzi==0: if count+2>=data-1: result_fenmu=0 break else: result_fenzi=dicts[count+2][Fenshu.Fenzi.value] result_fenmu=dicts[count+2][Fenshu.Fenmu.value] count=count+2 continue result_fenmu=g1*result_fenmu # 这里是约分 因为相乘起来数会很大 越过最大的int,所以除以最大公约数 g3=a(abs(result_fenmu),abs(result_fenzi)) if g3>1: result_fenmu=result_fenmu/g3 result_fenzi=result_fenzi/g3 if count+1 >= data-1: break count+=1 # 如果是0的话直接输出0 if result_fenzi==0: print("0") elif abs(result_fenzi) < abs(result_fenmu): print("{0}/{1}".format(int(result_fenzi), int(result_fenmu))) elif abs(result_fenzi)
转载请注明原文地址: https://mac.8miu.com/read-55469.html
最新回复(0)