非常有意思的一道题,我这里还是用到了一个库函数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