LeetCode:Sqrt(x)

本文介绍了一种使用牛顿法求解整数平方根的方法。通过不断迭代逼近精确值,实现对输入整数x的平方根计算。此外,还提供了C++代码实现,并讨论了该方法的正确性。

题目链接

Implement int sqrt(int x).

Compute and return the square root of x.

面试时需要考虑x是否小于0.

分析:牛顿法,先假设一个初始解res(本文设为1),然后以抛物y = x^2-c(这里的c相当于题目中的x)上的点(res, res^2-c)为切点作切线,让res = 切线与x轴的交点,一直循环上面的操作直到前后两次的解相同。                                                   本文地址

class Solution {
public:
    int sqrt(int x) {
        double res = 1.0, tmpres = 0.0;
        while(int(res) - int(tmpres))
        {
            tmpres = res;
            //res / 2.0 + x /(2.0 * res)为切线与x轴的交点
            res =  res / 2.0 + x /(2.0 * res);
        }
        return (int)res;
    }
};

对于评论中caichunli999提出的该方法的正确性证明如下:

这篇博客给出了14种求平方根解法:http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

 

【版权声明】转载请注明出处http://www.cnblogs.com/TenosDoIt/p/3471926.html

转载于:https://www.cnblogs.com/TenosDoIt/p/3471926.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值