【LeetCode刷题】求平方根

牛顿法

  1. class Solution {  
  2. public:  
  3.     int mySqrt(int x) {  
  4.         if (x == 0) return 0;  
  5.         double last=0;  
  6.         double res=1;  
  7.         while(res!=last)  
  8.         {  
  9.             last=res;  
  10.             res=(res+x/res)/2;  
  11.         }  
  12.         return int(res);  
  13.     }  
  14. };  

   

二分法

  1. class Solution {  
  2. public:  
  3.     int mySqrt(int x) {  
  4.         //注:在中间过程计算平方的时候可能出现溢出,所以用long long  
  5.         long long i=0;  
  6.         long long j=x/2+1;//对于一个非负数n,它的平方根不会大于(n/2+1  
  7.         while(i<=j)  
  8.         {  
  9.             long long mid=(i+j)/2;  
  10.             long long res=mid*mid;  
  11.             if(res==x) return mid;  
  12.             else if(res<x) i=mid+1;  
  13.             else j=mid-1;  
  14.         }  
  15.         return j;  
  16.     }  
  17. };  
原文地址:https://www.cnblogs.com/xukaiae86/p/11713198.html