题解 | #求解立方根#

求解立方根

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

二分法缩减左右边界

两个注意点
1.负数立方根还是负数,可以先转化为正数,最后返回时再加回负号
2.如果目标绝对值 f 小于1,则左边界为 f ,右边界为1;如果目标绝对值 f 大于1,则左边界为1,右边界为 f

class Solution:
    def calCubRoot(self, tar: str)-> float:
        fl = float(tar)
        f = abs(fl)
        if f==float(0) or abs(f)==float(1):
            return (round(f,1))

        #初始化边界和结果变量
        elif abs(f)>1:
            left,right = 1,f
        else:
            left,right = f,1
        res = (right - left)/2+left

        #二分法缩短两边距离
        while round(res**3,5) != round(f,5):
            mid = (right - left)/2+left
            if abs(mid*mid*mid) > abs(f):
                right = mid
            else:
                left = mid
            res = (right - left)/2+left
        
        #加回负号
        return round(res if fl>0 else -res,1)

s = Solution()
print(s.calCubRoot(input()))
全部评论

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务