c语言迭代法求平方根_LeetCode刷题——54. 实现函数 int sqrt(int x),计算并返回x的平方根...

难度:medium

题目描述:

实现函数 int sqrt(int x)。计算并返回x的平方根

示例:输入2,输出1.

思路:

这道题和C语言教材的那道题一样的。

用牛顿迭代法。

要求X的平方根,那么必然存在一个实数N,使得N*N = X,所以可以转化为求函数f(x)=N²-X的零点问题。 在曲线f(x)上,设N为f(x)=0的正根,那么设一个临近正根N的数r(为了方便就直接设r等于X)在r值对应的曲线上的点作切线,交X轴于新的一点r_new,此时r_new逐渐逼近正确零点值N,然后再在r_new值对应的曲线上的点作切线,又交X轴于新的一点r_new_new,此时r_new_new逐渐逼近正确零点值N...然后这样一直迭代下去,直到逼近正确值。如下图所示:

d0b1c077413f0826cd6ed62bbed72f53.png

(图来自网络,侵删)

代码:

import java.util.*;public class Solution {    public int sqrt (int x) {        //0和1特殊情况单独拿出来判断        if(x == 0 || x == 1){            return x;        }                //先设一个接近正确根的数r,为方便直接设等于x/2,减少迭代次数        long r = x/2;                //当r²>x的时候说明还没有找到        while(r * r > x){            //那么利用牛顿迭代公式求出新的x值进行迭代            //推导见最后            r = (r + x / r) / 2;        }                //当r²<=x的时候说明找到了直接返回        //根据示例直接返回的是整型        return (int) r;    }}//r = (r + x / r) / 2 公式来源://f(r)=r*r-x   (其中r为变量,x为常量)//根据牛顿迭代共公式://r_new = r - f(r)/f'(r)//f'(r) = 2r//r_new = r - (r*r-x)/2r//r_new = r - r/2 + x/2r//r_new = r/2 + x/2r = (r + x / r) / 2
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值