详细思路
class Solution { public: int mySqrt(int x) { int left=1,right=x,ans=0; while(left<=right){ int mid=left+(right-left)/2; if(mid<=x/mid&&(mid+1)>x/(mid+1)){ ans=mid; break; } else if(mid<x/mid)left=mid+1; else right=mid-1; } return ans; } };
class Solution { public: int mySqrt(int x) { int left=1,right=x,ans=0; while(left<=right){ int mid=left+(right-left)/2; if((long long)mid*mid<=x&&(long long)(mid+1)*(mid+1)>x){ ans=mid; break; } else if((long long)mid*mid<x)left=mid+1; else right=mid-1; } return ans; } };
class Solution { public: int mySqrt(int x) { if(x==0)return 0; double x0=x,c=x; while(1){ double xi=(c/x0+x0)/2.0; if(x0-xi<1e-7)break; x0=xi; } return (int)x0; } };
原文:https://www.cnblogs.com/zhouzihong/p/15076983.html