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

[LintCode]sqrt(x)

时间:2015-07-16 18:24:38      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

法1:二分

 1 class Solution {
 2 public:
 3     /**
 4      * @param x: An integer
 5      * @return: The sqrt of x
 6      */
 7     int sqrt(int x) {
 8         // write your code here
 9         long long l = 1, r = x;
10         while(l<r)
11         {
12             long long m = (l+r)/2;
13             if(m*m>x)   r = m-1;
14             else
15             {
16                 if((m+1)*(m+1)>x)   return m;
17                 else
18                 {
19                     l = m+1;
20                 }
21             }
22         }
23     }
24 };

 法2:牛顿法

要求x的平方根,首先任取一个数y,如果y不是x的平方根或者精度不够,则令y = (y+x/y)/2,循环直到获得x的平方根或者达到我们满意的精度为止,每次循环都会使y更接近x的平方根。

 1 #include <cmath>
 2 class Solution {
 3 public:
 4     /**
 5      * @param x: An integer
 6      * @return: The sqrt of x
 7      */
 8     int sqrt(int x) {
 9         // write your code here
10         double y = 1.0;
11         while(abs(y*y-x)>1)
12             y = (y+x/y)/2;
13         return (int)y;
14     }
15 };

 

[LintCode]sqrt(x)

标签:

原文地址:http://www.cnblogs.com/pczhou/p/4651713.html

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