[leedcode 69] Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.

public class Solution {
    //本题利用了牛顿迭代法:设r是f(x) = 0的根(x^2-k=f(x)),选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0     //)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。

    //过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值     //序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
    //根据牛顿迭代的原理,可以得到以下的迭代公式:X(n+1)=[X(n)+p/Xn]/2
    //还可以用常识性知识考虑,x=(x+k/x)/2
    
    //本题注意点:
    //1.返回结果要先声明为double
    //2.需要检查参数的正负
    //3.注意1e-6的写法
    
    


    public int mySqrt(int x) {
        if(x<=0) return 0;
        double res=1.0;
        while(Math.abs(res*res-x)>1e-6){
            res=(res+x/res)/2;
        }
        return (int)res;
    }
}

 

posted @ 2015-07-13 22:08  ~每天进步一点点~  阅读(179)  评论(0编辑  收藏  举报