题解 | #求解立方根#

求解立方根

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()

全部评论

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务