题解 | #求解立方根#
求解立方根
http://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
最后的做法是使用二分法来做,答案见下方。 刚开始是按线性地搜索整数和一位小数,做法见最后。
#使用二分法重做此题,
Num = float(input())
#先提取符号,然后在正数范围内搜索答案
if Num<0:
N_flag = -1
Num = (-1)*Num
elif Num == 0:
result = 0
else:
N_flag = 1
left = 0
#要单独处理0~1范围的搜索边界。因为在Num小于1时,立方根会大于Num,所以,需要把右边界设置到1。
if Num > 1:
right = Num
else:
right = 1
mid = Num
while(left <= right and abs(mid**3 - Num) > 0.01): #二分法寻找,设置截止条件,误差小于0.01的时候,退出
mid = left + (right - left)/2
if(mid**3 < Num):
left = mid + 0.01
elif mid**3 > Num:
right = mid - 0.01
elif mid**3 == Num:
result = mid
break
result = mid*N_flag #记得把符号乘回来
print(round(result,1)) #最后取一位小数输出
'''
while True:
try:
Num = float(input())
if Num<0:
N_flag = -1
Num = (-1)*Num
elif Num == 0:
result = 0
else:
N_flag = 1
i = 0
while(i**3<=Num):
i+=1
j=0
while((i-1)+j*0.1)**3 <= Num:
j+=1
k=0 #为了对小数点后第二位进行四舍五入,需要计算到第二位。
while((i-1)+(j-1)*0.1+k*0.01)**3 <= Num:
k+=1
if k>=5: #四舍五入
result =(i-1 + (j)*0.1) * N_flag #注意处理负数
else:
result =(i-1 + (j-1)*0.1) * N_flag
#print(result)
print(round(result,1)) ##最坑莫过于此,要取round
except:
break
'''