问题描述:
实现 int sqrt(int x)
函数,计算并返回 x 的平方根
样例:sqrt(3) = 1,sqrt(4) = 2,sqrt(5) = 2,sqrt(10) = 3
挑战:O(log(x))(即要求循环次数不可太多)
算法:
public static long sqrt(long n){
if(n==0){
return 0;
}
long result=n/2;
//二分法能快速找到平方根大概的范围,减少循环次数;
while(result*result>n){
result=result/2;
}
if(n==0){
return 0;
}
long result=n/2;
//二分法能快速找到平方根大概的范围,减少循环次数;
while(result*result>n){
result=result/2;
}
//遍历所在范围,找到合适值
for(long i=result;i<=result*2;i++){
if((i*i<=n)&&((i+1)*(i+1)>n)){
result=i;
break;
}
}
return result;
}