Sqrt(x)
Implement?int sqrt(int x).
Compute and return the square root of?x.
思路:二分查找法解決這道題
class Solution { public:int sqrt(int x) {if(x<=1)return x;int low=1;int high=x;while(low<=high){int mid=low+(high-low)/2;if(mid==x/mid)return mid;else if(mid<x/mid)low=mid+1;elsehigh=mid-1;}return high;} };?思路二:用牛頓求根法。首先,選擇一個接近函數零點的,計算相應的和切線斜率(這里表示函數的導數)。然后我們計算穿過點并且斜率為的直線和軸的交點的坐標,也就是求如下方程的解:
我們將新求得的點的坐標命名為,通常會比更接近方程的解。因此我們現在可以利用開始下一輪迭代。迭代公式可化簡為如下所示:
已經證明,如果是連續的,并且待求的零點是孤立的,那么在零點周圍存在一個區域,只要初始值位于這個鄰近區域內,那么牛頓法必定收斂。 并且,如果不為0, 那么牛頓法將具有平方收斂的性能. 粗略的說,這意味著每迭代一次,牛頓法結果的有效數字將增加一倍。
class Solution { public:int sqrt(int x) {if(x<=1)return x;double a=x;double b=0;while(abs(b-a)>1e-6){b=a;a=(b+x/b)/2;}return (int)a;} };?
?
轉載于:https://www.cnblogs.com/awy-blog/p/3750307.html
總結
- 上一篇: libiconv2.dll
- 下一篇: Android网络项目课程笔记-----