zoukankan      html  css  js  c++  java
  • [编程题] lc [69. x 的平方根]

    [编程题] 69. x 的平方根

    题目

    image-20200730112228300

    方法1:二分法

    Java代码

    public static int sqrt(int x) {
            if(x==0 || x==1){return x;}
            int l=0;
            int  r=x;
            int res=-1;
            while (l<=r){
                int m = (l+r)/2;
                if(m == x/m) {
                    return m;
                }
                else if(m>x/m) {
                    r = m-1;
                } else{
                    l = m+1;
                    res = m;  //解释:为什么时刻在这里记录m是因为我们舍弃了小数部分,只有m*m<x的情况符合我们需要的m
                }
            }
            return res;
    }
    

    方法2:牛顿迭代法

    公式推导

    image-20200730113911182

    代码

    //根据牛顿迭代法公式:x(n+1) = (xn+y0/xn)/2
    public static int mySqrt3(int x) {  //如果我们要精确计算值也可以把返回值改为double即可
        long r = x; //r*r会越界,这里用long
        while (r*r>x){
            r = (r+x/r)/2;
        }
        return (int)r;
    }
    

    我们计算出需要的指定精度的确切值

    方法1:二分法
    public static double sqrt2(int x) {
            if(x==0 || x==1){return x;}
            double l=0;
            double r=x;
    
            double res=-1;
            while (r-l>=1e-9){  ////这里是精度判断的退出条件
                double m = (l+r)/2;
                if(m == x/m) {
                    return m;
                }
                else if(m>x/m) {
                    r = m-1e-9;  //这里是每次减去精度
                } else{
                    l = m+1e-9; //这里是每次减去精度 
                    res = m;  //解释:为什么时刻在这里记录m是因为我们舍弃了部分精确值,只有m*m<x的情况符合我们需要的m
                }
            }
            return res;
    }
    

    方法2:牛顿迭代法

    //根据牛顿迭代法公式:x(n+1) = (xn+y0/xn)/2
        public static double sqrt3(int x) {
            double r = x;
            while (r*r>x){
                r = (r+x/r)/2;
            }
            return r;
    }
    

    image-20200730114127611

  • 相关阅读:
    ajax(ajax开发)
    gnuplot常用技巧
    Gunplot 命令大全
    程序员的绘图利器 — Gnuplot
    什么是 gnuplot
    QT正则表达式---针对IP地址
    JSP实现分页功能
    java.lang.OutOfMemoryError: Java heap space错误及处理办法
    getInitParameter()
    C/S软件的自动升级部署
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13402905.html
Copyright © 2011-2022 走看看