1 class Solution { 2 public: 3 int mySqrt(int x) { 4 double pre = x; 5 double cur = 1; 6 while(abs(cur - pre) >= 1){ 7 pre = cur; 8 cur = (cur + x/cur)/2; 9 } 10 return cur; 11 } 12 };
使用牛顿法,这里值得注意的是,由于函数特性,和牛顿法的逼近原理,答案最终一定是从目标点右侧逼近答案。
所以这里在迭代过程中,两次迭代值之间误差小于1即可返回,向下取整就是答案。
使用这种判定方法,绕过了各种溢出问题,很强势。