LeetCode------x的平方根

本文介绍了一种使用牛顿迭代法计算非负整数平方根的方法,通过不断迭代逼近真实值,最终返回整数部分的结果。示例中详细解释了如何设置多项式P(x),并展示了具体的迭代公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://leetcode-cn.com/problems/sqrtx/

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 
     由于返回类型是整数,小数部分将被舍去。

解题方法:明白开平方根基本算法,这里使用牛顿迭代法。

根据牛顿的理论

对于多项式 P(x) = a*(x^n)+b*(x^(n-1))+c*(x^(n-2))······

若存在近似值r,使得P(r)≈ 0,那么 r - P(r)/P'(r) 的值将比 r 更加接近 真实解 的值。

那么如何使用呢?

对于求24的平方根,我们可以设P(x)=x^2 - 24,那么P‘(x) = 2*x

这样对于近似值r,设置r = r - (r^2-24)/2*r,这样不断迭代,就可以更加快速地得到近似值。

int mySqrt(int x) {
    double i =(double)x/2;
    while(fabs(i*i-x)>0.1){
        i = i - (i*i-x)/(2*i);
    }
    return (int) i;    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值