您的位置:首页 > 其它

leetcode sqrt

2015-06-11 10:37 411 查看
这题是给出一个x,求平方根。

一种直接二分,一种牛顿迭代求不动点。

二分:

class Solution {
public:
bool isAns(long long r, long long x)
{
if (r*r<=x && (r + 1)*(r + 1)>x)
return true;
return false;
}
int mySqrt(int x) {
if (x <= 0)
return 0;
long tar = x;
long long  low = 0,high= x;
long long mid = low + (high - low) / 2;
while (!isAns(mid, tar))
{
if ((mid + 1)*(mid + 1) <= tar)
{
low = mid+1;
}
else{
high = mid-1;
}
mid = low + (high - low) / 2;
}
return mid;
}
};


牛顿法:

#include <math.h>
class Solution{
public:
int mySqrt(int x) {
if (x <= 0)
return 0;
double init = x / 2.0;
double ans =  init* 0.5 + x / (2 * init);
while (fabs(ans - init) > 0.005)
{
init = ans;
ans =  init* 0.5 + x / (2 * init);

}
return (int)ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: