求平方根

江枫思渺然 提交于 2019-12-01 18:56:41

牛顿法

class Solution {

public:

int mySqrt(int x) {

if (x == 0) return 0;

double last=0;

double res=1;

while(res!=last)

{

last=res;

res=(res+x/res)/2;

}

return int(res);

}

};

   

二分法

class Solution {

public:

int mySqrt(int x) {

//注:在中间过程计算平方的时候可能出现溢出,所以用long long

long long i=0;

long long j=x/2+1;//对于一个非负数n,它的平方根不会大于(n/2+1

while(i<=j)

{

long long mid=(i+j)/2;

long long res=mid*mid;

if(res==x) return mid;

else if(res<x) i=mid+1;

else j=mid-1;

}

return j;

}

};

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!