一、二分法
int sqrt(int n) {
int left=0,right=n;
while(left<=right){
long long mid=(left+right)>>1; //mid必须为long long,否则设置temp为long long不管用
long long temp=mid*mid;
if(temp==n)
return mid;
else if(temp<n)
left=mid+1;
else
right=mid-1;
}
return right;
}
二、牛顿迭代法
int sqrt(int n) {
double x0,x1=1;//初始值不能为0,否则倒数为0
do{
x0=x1;
x1=x0-(x0*x0-n)/(2*x0); //x1=x0-f(x0)/f'(x0)
}while(fabs(x1-x0)>1e-5&&fabs(2*x0)>1e-5);
return (int)x0;
}