题解 | #求解立方根#
求解立方根
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()