题解 | #求解立方根#

求解立方根

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

二分法,为了思路简单,把负数转为正数处理,把(0,1)之间的数转为(1,+oo)处理,打印的时候再转换回来。

def fun():
    n = float(input())
    if n == 0:
        return print(0.0)
    # 负数结果和正数一样,转换为正数
    flag = -1 if n < 0 else 1
    n = flag * n
    # 小于1的取倒数转换为大于1的数来处理,结果再取倒数倒回来
    flag2 = "/" if 0 < n < 1 else ""
    n = 1 / n if 0 < n < 1 else n
    # 由于没有负数和小于1的数,答案应在的范围大于1
    ans_range = (1, n)
    # 默认答案从二分中间开始
    ans = (ans_range[0] + ans_range[1]) / 2
    while abs(ans * ans * ans - n) > 0.0001:
        # 大于时更新最大值,小于时更新最小值
        ans_range = [ans_range[0], ans] if ans * ans * ans > n else [ans, ans_range[1]]
        ans = (ans_range[0] + ans_range[1]) / 2
    # 是不是0到1之间的数,倒数回来
    if flag2 == "/":
        print(f"{1 / ans * flag:.1f}")
    else:
        print(f"{ans * flag:.1f}")


fun()

全部评论

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
面试官问:为什么不考研?该怎么回答啊😭我说现在的就业环境差到底了,还有就是我不想学数学,感觉面试官笑容都凝固了😢
DayDayNoBug的鲜芋球:我说的是“上学期其实尝试过去探索一些研究的方向,但感觉那些对我来说都没有很大的吸引力,相比起研究我可能更喜欢开发这种实践性的东西,它会让我觉得很有意思并且会为之深入进去”(虽然也不知这个回答怎么样哈哈哈哈哈哈)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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