题解 | #求平方根#

求平方根

http://www.nowcoder.com/practice/09fbfb16140b40499951f55113f2166c

本题可以使用牛顿迭代法来完成本题的求解,牛顿迭代法也是对 sqrt 的最佳实践。该算法来源于游戏 Quake 3 (雷神之锤3),大家感兴趣可以详细去了解一下,非常有意思。

引用 Wiki 对牛顿迭代法的两篇介绍:

Fast inverse square root

Newton's method

import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int sqrt (int x) {
        double res = 0;
        double temp = 0;
        temp = x / 2;
        int i = 0; // 计数器,避免过度迭代
        while (x >= 0 && i < 100) {
            i++;
            // 牛顿迭代公式
            res = temp - (temp * temp - x) / (2 * temp);
            double value = Math.abs(temp - res);
            // 用于控制精度
            if (value < 0.001) { 
                return (int)res; 
            } else {
                temp = res;
            }
        }
        return (int)x; 
    }
}
全部评论

相关推荐

大飞的诡术妖姬:之前看b站多明海有个说法,日本就业竞争非常低的原因不光是毕业学生少,还有很多人干两年不喜欢职场氛围就辞职躺平,位置也空了很多,论吃苦耐劳还得看咱们
点赞 评论 收藏
分享
字节一直是我的白月光,考虑到转正还是拒了日常实习。
从明天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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