Implement int sqrt(int x).
Compute and return the square root of x.
这题当时面试的时候被问过,我记得有个牛顿迭代法。今天正好做到了就实现一下。
求n的平方根就是要求f(x)=x^2-n与x轴的交点(正的那个)。先随便猜一个数x0.如果x0不是根,那么在x0处做一个f(x)的切线,这条切线与x轴的交点x1作为下一次迭代的初值。这样迭代一会就找到解了。
在x0处的切线方程是y=2x0*x-(x0^2+n)。这样得到迭代方程为x[i+1]=x[i]/2+n/(2x[i])。
public class Solution {
public int sqrt(int x) {
if(x == 0)
return 0;
double x0 = 5.0;
double x1 = 6.0;
while(x0 != x1){
x0 = x1;
x1 = x0 / 2 + x / (2 * x0);
}
return (int)x1;
}
}
本文介绍了一种使用牛顿迭代法计算整数平方根的方法。通过不断逼近精确值来寻找x的平方根,利用迭代公式x[i+1]=x[i]/2+n/(2x[i])进行计算。

被折叠的 条评论
为什么被折叠?



