题解 | #求解立方根#
求解立方根
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()
顺丰集团工作强度 309人发布