力扣题解-数学题类| 手动实现求平方根sqrt()方法

实现 int sqrt(int x) 函数。

2020深信服笔试原题
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:
输入: 4
输出: 2

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

理论基础:

牛顿迭代法 牛顿迭代法顾名思义当然是迭代法的一种,所谓迭代法顾名思义就是重复地进行某种运算。进行到何时为止全凭个人喜好,但是理想情况下应该是计算的次数越多离真正的解就越近。为了用迭代法近似地解一个方程,我们有两个问题。问题一是迭代是否收敛,问题二是收敛时是否收敛于我们想要的解。
在这里插入图片描述
牛顿迭代法图解:
在这里插入图片描述
首先要明白,牛顿迭代法求的是函数和X轴的交点的横坐标,也就是我们说的根

1)那么第一步就是构建曲线了。

假设有一个数c,我们求它的平方根x,那么有一个等式,x^2 = c;挪到一边就是求 f = x^2 - c的根x

2)带入上述最重要的公式:
在这里插入图片描述
3)既然是个迭代,那么就有迭代的开始和结束了
3.1)迭代的开始,我们可以取c
3.2)迭代的结束,就是和我们预期的很接近。

代码实现

public int getSqrt (int num) {
        if(num==0) return 0;
        double result = 1, pre = 0;
        while (result!=pre) {
			pre = result;
			result = (result + num/result)/2;
		}
        return (int)result;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值