关闭

LeetCode-Sqrt(x)-解题报告

标签: C++leetcode
180人阅读 评论(0) 收藏 举报
分类:

原题链接 https://leetcode.com/problems/sqrtx/

Implement int sqrt(int x).

Compute and return the square root of x.


用数学的方法求解sqrt(x)


可以使用牛顿迭代法,也可以使用二分法。

我使用的是牛顿迭代法,前段时间看到一个求解x^(-2)的快速解就用的是牛顿迭代法。


设 x^2 - n == 0 方程的非负根便是解。f '(x) = 2x, 

对于点(x0,f(x0)),对过该点原图像的切线方程为y - f(x0) = 2x0(x - x0),

该切线与x轴的交点更接近正确解。

 x比x0更接近准确解。

化简后得到 ,迭代值x与x0的值相差为1e-10是停止迭代。





class Solution {
public:
   int mySqrt(int x) {
		if (x == 0)return 0;
		double  cur = x;
		double pre;
		do{
			pre = cur;
			cur = (cur + x / cur) / 2;
		} while (abs(cur - pre) > 1e-10);
		return (int)cur;
	}
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15641次
    • 积分:851
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条
    文章分类