141. x的平方根
发布日期:2021-06-28 19:27:31 浏览次数:3 分类:技术文章

本文共 917 字,大约阅读时间需要 3 分钟。

141. x的平方根

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

样例

样例 1:

输入: 0

输出: 0

 

 

样例 2:

输入: 3

输出: 1

样例解释:

返回对x开根号后向下取整的结果。

 

样例 3:

输入: 4

输出: 2

 

挑战

O(log(x))

public class Solution {

    /**

     * @param x: An integer

     * @return: The sqrt of x

     */

    public int sqrt(int a) {

        // write your code here

        double x = 1.0;

        double cheak;

        do {

            x = (a / x + x) / 2.0;//差不多可以理解为二分查找,X是a的平方根

            cheak = x * x - a;//当前x的平方和a的误差

        } while ((cheak >= 0 ? cheak : -cheak) >0.1);//0.1代表误差

        // System.out.println(x);

        return (int) x;

    }

}

 

 

牛顿迭代法

比如136161这个数字,首先我们找到一个和136161的平方根比较接近的数,任选一个,比方说300到400间的任何一个数,这里选350,作为代表。

  我们先计算0.5(350+136161/350),结果为369.5。

  然后我们再计算0.5(369.5+136161/369.5)得到369.0003,我们发现369.5和369.0003相差无几,并且369²末尾数字为1。我们有理由断定369²=136161。

  一般来说,能够开方开的尽的,用上述方法算一两次基本结果就出来了。再举个例子:计算 。首先我们发现600²<469225<700²,我们可以挑选650作为第一次计算的数。即算0.5(650+469225/650)得到685.9。而685附近只有685²末尾数字是5,因此685²=469225。从而 。 

  对于那些开方开不尽的数,用这种方法算两三次精度就很可观了,一般达到小数点后好几位。

  实际中这种算法也是计算机用于开方的算法

转载地址:https://blog.csdn.net/xwdrhgr/article/details/116004921 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:142. O(1)时间检测2的幂次
下一篇:140. 快速幂

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月06日 09时11分01秒