「offerMe——刷题必备」java如何实现开根号的运算

createh53个月前 (02-01)技术教程32

原文链接:
https://mp.weixin.qq.com/s/H2EY2Bi5KcTbC15F9M9KMg

今天我们来看一下这道题,java如何实现开根号的运算。大家都知道,java,c++,python等都有直接的函数可以给我们用,但是面试官这个时候让我们手撕源码,这个时候怎么做呢,来,不要慌!!!

如果某个数字正好可以开根号为2个整数,例如1,4,9等,那就很简单了。


如果某个数字不可以正好开根号为2个整数,而且要保留几位精度,例如:2,3,5等,我们该怎么办呢?????


首先我们可以把这个数字分成整数部分小数部分,分别计算。

例如根号5≈2.236,我们可以先算出整数部分为2,然后再根据保留几位精度,去计算小数部分。依次计算十分位、百分位和千分位等,然后把整数位+十分位+百分位+千分位+。。。,结果就是我们想要的结果了。


来看代码

import java.math.BigDecimal;
 


public class Test6 {
    public static void main(String[] args) {
        System.out.println(Math.sqrt(5));
        System.out.println(MathSqure(5, 6));
    }
    //需要开根号的数据
  //需要保留的精度,即几位小数
    public static double MathSqure(int n, int m){
        double[] arr = new double[m];
        if(m >0){
            arr = sc(m);
        }
        int s = sq(n);
        return sb(n, s, arr);
    }
    /**
     * 计算要保留几位小数
     * @param m
     * @return
     */
    public static double[] sc(int m){
        double[] arr = new double[m];
        int num = 0;
        while(num != m){
            double f = 1;
            for(int i=0;i<=num;i++){
                f = f*10;
            }
            arr[num] = 1/f;
            num++;
        }
        return arr;
    }
    /**
     * 计算整数位
     * @param n
     * @return
     */
    public static int sq(int n){
        if( n == 1){
            return 1;
        }
        int tmp = 0;
        for(int i=1;i<=n/2+1;i++){
            if(i*i == n){
                tmp = i;
                break;
            }
            if(i*i > n){
                tmp = i-1;
                break;
            }
        }
        return tmp;
    }
 
 
 
    /**
     * 开根号
     * @param n
     * @param j
     * @param arr
     * @return
     */
    public static double sb(int n, double j, double[] arr){
        double tmp = j;
        for(int p=0;p0){
                j = tmp;//计算过后的值(整数位+小数位的和,赋值给j,下面继续运算)
            }
            for(int i=1;i<=9;i++){//小数位只有九位{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9}
                tmp = i*arr[p]+j;//i*arr[p],相当于每次加0.1,0.2 ...
                if(tmp*tmp == n){
                    return tmp;
                }
                if(tmp*tmp >n){
                    //避免丢失精度
                    BigDecimal c1 = new BigDecimal(Double.toString(tmp));
                    BigDecimal c2 = new BigDecimal(Double.toString(arr[p]));
                    tmp = c1.subtract(c2).doubleValue();
                    break;
                }
            }
        }
        return tmp;
    }
}


思路继续讲解。


小于2.3



把2.2记录在这里



小于2.24



记录2.23

依次这样做。


所以大家懂了吗 ?

相关文章

Java高级工程师学习线路总结:Java Web开发

  目前,国内外信息化建设已经进入基于Web应用为核心的阶段,Java作为应用于网络的最好语言,前景无限看好。然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。那么,具备Java...

如果通过Java来完成大数据开发,需要学习哪些内容

首先,当前大数据领域的开发岗位确实比较多,近两年有不少大数据方向的研究生也会从事大数据开发岗位,而Java语言则是大数据开发人员的常用工具,所以如果要从事大数据开发岗位,可以重点学习一下Java语言。...

基于DAO模式的Hibernate框架 在Java Web开发中的应用

王正玉,李 斌(安徽广播电视大学 远程教育技术与图文信息中心 图书馆,安徽 合肥 230022)摘 要:Hibernate是目前Java领域中最受欢迎的OR映射开源框架,它的出现使程序员得以摆脱编写繁...

再见前端!纯 Java 撸个后台管理系统,这框架用起来贼爽

一个管理系统,往往需要后端+前端一起实现。单表CRUD操作往往都差不多,我们可以使用代码生成器来实现。有时候我们的管理系统只需要一些简单的CRUD页面,有没有什么框架能做到不写前端代码,纯Java撸个...

软件工程专业女生该主攻Java、前端还是云计算

首先,在主攻方向的选择上要考虑到自己的兴趣爱好,同时还要考虑到自己的能力特点,以及当前行业领域的人才需求趋势。从就业的角度来说,Java开发、前端开发、云计算和游戏开发都有不错的就业前景,不论选择哪一...

java培训一般要学多久(java培训班一般学几个月)

“Java就业薪资高薪,通过体系性的培训年收入就是20-30万”,最近在接待学员的过程中发现很多机构打着高薪招募学员,其实Java培训出来的薪资有没有那么多高,肯定是有部分学员能达成,但并不是所有学员...