二分查找求立方根

求解立方根

http://www.nowcoder.com/questionTerminal/caf35ae421194a1090c22fe223357dca

import sys

for line in sys.stdin:
    num = eval(line)
    begin = 0
    # 如果输入数值大于9则提前除以3,否则除以2,因为2.1^3 > 9 && 2^3 = 8,
    # 结论:当num < 9时,立方根肯定小于输入值的50%,当 num >= 9时,立方根肯定小于1/3
    end = num/3 if num >= 9 else num/2
    ret = 0
    # 二分查找,逼近
    while 1 != round(abs(end-begin)*10, 0):
        mid = round((begin + end)/2, 1)
        val = mid**3
        if val > num:
            # 注意这里别自作聪明,提前减0.1,写成 end = mid-0.1
            end = mid
        elif val < num:
            begin = mid
        else:
            ret = mid
            break
    if 0 == ret:
        gap_end = abs(end**3-num)
        gap_begin = abs(begin**3-num)
        if gap_end < gap_begin:
            ret = end
        else:
            ret = begin
    print(ret)

全部评论

相关推荐

02-15 14:18
已编辑
江西工程学院 Java
董春花_:个人建议1. 排版极简化,别花花绿绿的。2.专业技能不必要介绍那么详细。什么熟练熟悉精通没必要。按照语言,工具framework等等这种划分一下就行。3.项目介绍的太泛泛了,非常空洞。你新增了什么功能?修改了什么功能?怎么做的? 4.再做个项目放上去吧。 学历不行就只能拼能力了,先有个班上,然后跳。干就完了
Java求职圈
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务