小明思考

Just a software engineer
posts - 124, comments - 36, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

快速开平方

Posted on 2013-04-15 10:19 小明 阅读(1459) 评论(0)  编辑  收藏 所属分类: 数据结构和算法
问题实现 int sqrt(int x);
计算和返回x的平方根。

学过数值分析的都知道牛顿迭代法



令f(x) = x2-a;
那么上式就变成:

xn+1 =xn-(xn2-a)/(2*xn)=(xn+a/xn)/2

实现的代码如下,简单优美,收敛快。

public class Solution {
    public int sqrt(int x) {
        if(x==0) return 0;
        if(x<=2) return 1;
        int result = x/2;
        while(true){
            int next = (result+x/result)/2;
            if(next>=result){
                break;
            }
            else{
                result = next;
            }
        };
        return result;
    }
}





只有注册用户登录后才能发表评论。


网站导航: