码迷,mamicode.com
首页 > 其他好文 > 详细

Sqrt(x)

时间:2014-05-25 19:35:33      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   java   

Implement int sqrt(int x).

Compute and return the square root of x.

思路:二分查找法解决这道题

bubuko.com,布布扣
class Solution {
public:
    int sqrt(int x) {
        if(x<=1)
            return x;
        int low=1;
        int high=x;
        while(low<=high)
        {
            int mid=low+(high-low)/2;
            if(mid==x/mid)
                return mid;
            else if(mid<x/mid)
                low=mid+1;
            else
                high=mid-1;
        }
        return high;
    }
};
bubuko.com,布布扣

 思路二:用牛顿求根法。首先,选择一个接近函数bubuko.com,布布扣零点的bubuko.com,布布扣,计算相应的bubuko.com,布布扣和切线斜率bubuko.com,布布扣(这里bubuko.com,布布扣表示函数bubuko.com,布布扣的导数)。然后我们计算穿过点bubuko.com,布布扣并且斜率为bubuko.com,布布扣的直线和bubuko.com,布布扣轴的交点的bubuko.com,布布扣坐标,也就是求如下方程的解:

bubuko.com,布布扣

我们将新求得的点的bubuko.com,布布扣坐标命名为bubuko.com,布布扣,通常bubuko.com,布布扣会比bubuko.com,布布扣更接近方程bubuko.com,布布扣的解。因此我们现在可以利用bubuko.com,布布扣开始下一轮迭代。迭代公式可化简为如下所示:

bubuko.com,布布扣

已经证明,如果bubuko.com,布布扣是连续的,并且待求的零点bubuko.com,布布扣是孤立的,那么在零点bubuko.com,布布扣周围存在一个区域,只要初始值bubuko.com,布布扣位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果bubuko.com,布布扣不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

bubuko.com,布布扣
class Solution {
public:
    int sqrt(int x) {
        if(x<=1)
            return x;
        double a=x;
        double b=0;
        while(abs(b-a)>1e-6)
        {
            b=a;
            a=(b+x/b)/2;
        }
        return (int)a;
    }
};
bubuko.com,布布扣

 

 

Sqrt(x),布布扣,bubuko.com

Sqrt(x)

标签:style   class   blog   c   code   java   

原文地址:http://www.cnblogs.com/awy-blog/p/3750307.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!