Sqrt(x)
题目:计算X均方根
思路:二分法
二分法不再累赘,只是想说的,程序的一个巧妙的地方在于,溢出的时候,他的开方值是46340,也就是说,我本程序最大的结果最大为46340,而我对应的那个原来的数最大只可能是46340*2,这就是程序里面(x/2>=46340)有本条语句的原因。
代码:
class Solution { public: int mySqrt(int x) { if(x<=0) return 0; if(x<4) return 1; if(x/2>=46340){ return binaryLowInt(x,0,46340); } return binaryLowInt(x,0,x/2); } int binaryLowInt(int x,int left,int right){ if(left>right){ return right; } int mid=(left+right)/2; if(mid*mid==x){ return mid; } if(mid*mid>x){ return binaryLowInt(x,left,mid-1); } if(mid*mid<x){ return binaryLowInt(x,mid+1,right); } } };