非常有意思的一道题,我这里还是用到了一个库函数math.floor,因为range里必须要是整形,以目前的知识暂时想到这样做。
然后解题就是,先找出整数部分介于哪两个整数之间,然后找小数点第一位,然后检查小数点第二位。
有几个关键记录一下,一个是输入的浮点数在哪个区间(负无穷,-1】,(-1,0),0,(0,1),【1,正无穷),这几个对应着不同的对输入值的预处理。然后就是函数里面分级比较,如果到9还是没比完说明要进一。
import math
while True:
try:
num1 = float(input())
def cuberoot(n):
flag = 0
for i in range(0,math.floor(n)):
if(i ** 3 > n):
k = i - 1
flag = 1
break
if(i ** 3 == n):
return i
break
if(flag == 1):
for i in range(10):
if((k+i*0.1)**3 > n):
k = k+(i-1)*0.1
flag = 2
break
elif((k+i*0.1)**3 == n):
return (k+i*0.1)
break
if(i == 9):
k = k+0.9
flag = 2
if(flag == 2):
flag1 = 0
for i in range(10):
if((k+i*0.01)**3 >= n):
if(i >= 5):
return (k+0.1)
break
else:
return k
break
flag1 = 1
if(flag1 == 0 and i == 9):
return(k+0.1)
flag = 0
k = 0
if(num1 >= 1):
res_num1 = cuberoot(num1)
print('%0.1f'%res_num1)
elif(num1 <= -1):
num2 = -num1
res_num2 = cuberoot(num2)
print('-%0.1f'%res_num2)
elif(num1 > 0 and num1 < 1):
k = 0
while(num1 < 1):
num1 = num1 * 1000
k += 1
if(num1 > 1):
break
res_num3 = cuberoot(num1)
for j in range(k):
res_num3 = res_num3 / 10
print('%0.1f'%res_num3)
elif(num1 > -1 and num1 < 0):
num4 = -num1
k = 0
while(num4 < 1):
num4 = num4 * 1000
k += 1
if(num1 > 1):
break
res_num4 = cuberoot(num4)
for j in range(k):
res_num4 = res_num4 / 10
print('-%0.1f'%res_num4)
else:
print(0.0)
except:
break


京公网安备 11010502036488号