|
发表于 2019-10-23 22:06:16
|
显示全部楼层
- import re
- def getvalue(num1,num2): #num1,num2均为整数
- tennum=0
- while num2%10==0: #num2分成一个整数与10的tennum次方乘积
- tennum +=1
- num2 //=10
- intstr=num1//num2
- remainder=num1%num2
- if remainder !=0:
- intstr=str(intstr)+'.'
- flag=[]
- startflag=0
- while remainder !=0:
- flag.append(remainder)
- zeronum=0
- while remainder<num2:
- zeronum +=1
- remainder *=10
- bitstr='0'*(zeronum-1)+str(remainder//num2)
- remainder %=num2
- #print('flag is %s,bitstr is %s,remainder is %s'%(str(flag),bitstr,remainder))
- if remainder in flag and flag.count(remainder)==2 and startflag==0: #循环
- intstr+=('('+bitstr)
- startflag+=1
- elif remainder in flag and flag.count(remainder)==3:
- intstr+=')'
- return (intstr,tennum,num2)
- else:
- intstr+=bitstr
- return (str(intstr),tennum,num2)
- def func258(numerator,denominator):
- (numerator,tennum,denominator)=getvalue(numerator,denominator)
- reslist=numerator.split('.') #获取整数部分和小数部分
- length =len(reslist[0]) #整数部分长度
- if len(reslist)==1:
- floatstr=''
- else:
- floatstr=reslist[1]
- #print('numerator is%s'%numerator)
- #print(reslist)
- if length>tennum:
- intstr=reslist[0][:length-tennum]
- floatstr=reslist[0][length-tennum:]+floatstr
- else:
- intstr='0'
- floatstr='0'*(tennum-length)+intstr+floatstr
- #print('intstr is%s,floatstr is %s'%(intstr,floatstr))
- if floatstr.find('(') !=-1: #有循环
- start=floatstr.find('(')
- samestr=floatstr[start+1:-1]
- rplstr=floatstr[start:]
- pattern=samestr+rplstr
-
- while pattern in floatstr:
- floatstr=floatstr.replace(pattern,rplstr)
- if len(floatstr) !=0:
- start=floatstr.find('(')
- while start>0:
- if floatstr[start-1]==samestr[-1]:
- samestr=floatstr[start-1]+samestr[:-1]
- floatstr=floatstr[:start-1]+'('+samestr+')'
- start=floatstr.find('(')
- else:
- break
- intstr +='.'+floatstr
- return intstr
复制代码
每天半小时,搞了好久了,最后堆成这个样了,尝试的结果
>>> func258(20,21)
'0.(952380)'
>>> func258(20,210)
'0.(095238)'
>>> func258(1,3)
'0.(3)'
>>> func258(6,3)
'2'
>>> func258(6,12)
'0.5' |
|