并未使用牛顿迭代,实现是通过二分搜索实现的,需要注意判断时候 x* x<K 容易溢出,所以可以改为 x< k/x。
#include <iostream> using namespace std; class Solution { public: int sqrt(int x) { if(x <2) return x; int lft =1 ,rgt = x; int mid = (lft+rgt)/2; while(lft+1<rgt){ if(mid == x/mid) return mid; if(mid < x/ mid){ lft = mid; } else{ rgt = mid; } mid = (lft+rgt)/2; } if( rgt<=mid/rgt) return rgt; return lft; } }; int main() { Solution sol; for(int i =1;i<50;i++) cout<<sol.sqrt(i)<<endl; return 0; }