一個面試題:不用sqrt函數如何實現開方
用二分法。
上界初始化為數字本身,下界初始化為0.0,這樣用二分,判斷中間數字的平方和目標數字比較,再修改上界和下界,直到小於一定的閾值。
注意結束條件和精度判斷
// // Created by LK on 2020/3/21. #include <iostream> #include <cmath> using namespace std; // 不用sqrt庫函數,實現開方 // 思路用二分法,比如2, left=0,right = 2, 然后 class Solution { public: double Sqrt(double n) { // if(n == 1) // return n; double left = 0.0; double hight = n; double p = 1e-5; // 此處為精度,當滿足該精度時返回近似值 double mid = (left + hight)/2.0; while (fabs(mid * mid - n) > p) // 精度比較 { if(mid * mid > n) hight = mid; else if (mid * mid < n) left = mid; else return mid; mid = (left + hight)/2.0; } return mid; } }; int main() { Solution s; cout << s.Sqrt(4); return 0; }
