题解 | #求解立方根# 二分超时,牛顿法加速

求解立方根

https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca?tpId=37&tqId=21330&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=3&judgeStatus=undefined&tags=&title=

# 二分超时
# def find_po(n):
#     left, right = 0, n
#     mid = (left + right)/2
#     while abs(mid ** 3 - n) > 0.001:
#         if mid ** 3 < n:
#             left = mid
#         else:
#             right = mid
#         mid = (left + right)/2
#     return mid

# while True:
#     try:
#         n = float(input())
#         print('%.1f'%find_po(n))

#     except EOFError:
#         break

def find_po(n):
    if n == 0:
        return 0.0

    # 如果 n 是负数,调整搜索区间
    left, right = (n, 0) if n < 0 else (0, n)

    # 使用牛顿法优化求解速度
    mid = (left + right) / 2
    while abs(mid ** 3 - n)>0.001:
        mid = mid - (mid ** 3 - n) / (3 * mid ** 2)

    return mid


while True:
    try:
        n = float(input())
        print("%.1f" % find_po(n))
    except EOFError:
        break
    except ValueError:
        print("Invalid input. Please input a number.")

全部评论

相关推荐

07-02 13:52
门头沟学院 Java
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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