题解 | #求解立方根#

求解立方根

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
'''



全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务