Java求数的平方根,不使用Math.sqrt

简介: 题目,给一个整数,求它的平方根,不能使用java自带的Math.sqrt();平方根就是开平方,比如4的平方根是2,100的平方根是10;

题目,给一个整数,求它的平方根,不能使用java自带的Math.sqrt();


平方根就是开平方,比如4的平方根是2,100的平方根是10;


思路:

我这个方法没啥特点,就是从1开始疯狂试探,直到有一个数 i 满足i * i<=x&&((i+1)*(i+1)>x),这个 i 就是x的平方根;


优化

基于上面的算法,大体思路不会变,我们在 j * j 不等于入参的时候,对结果进行二分后再返回,无限二分,直到不能再细分,这样的值会更接近真实平方根;

public class MySqrtDemo {
    public static void main(String[] args) {
        System.out.println(sqrt(10));// 3.1622772216796875
        System.out.println(Math.sqrt(10));// 3.1622776601683795
    }
    public static double sqrt(int i) {
        if (i <= 0) return i;
        double result;
        //从1开始疯狂试探
        for (int j = 1; true; j++) {
            if (j * j == i) {
                result = j;
                //记得跳出循环
                break;
            } else if ((j * j < i) && ((j + 1) * (j + 1) > i)) {
                result = half(i, j, j + 1);
                //记得跳出循环
                break;
            }
        }
        return result;
    }
    public static double half(int i, double small, double big) {
        double average = (small + big) / 2;
        double result = average * average;
        if (result == i) {
          //如果平均值*平均值等于入参,直接返回
            return average;
        } else if (result > i) {
          //大于,则在前一个数和平均值之间递归二分
            if (String.valueOf(average).length() >= 18) return average;
            return half(i, small, average);
        } else {
          //小于,则在平均值后一个数之间递归二分
            if (String.valueOf(average).length() >= 18) return average;
            return half(i, average, big);
        }
    }
}
相关文章
|
4月前
|
Java
8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏
8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏
78 1
|
3月前
|
C++ Java Go
Java每日一练(20230428) 搜索旋转排序数组、栈实现队列、平方根
Java每日一练(20230428) 搜索旋转排序数组、栈实现队列、平方根
45 0
Java每日一练(20230428) 搜索旋转排序数组、栈实现队列、平方根
|
7月前
|
Java
Java习题之实现平方根(sqrt)函数
Java习题之实现平方根(sqrt)函数
172 0
|
10月前
|
Java
Java语言如何求平方根
Java语言如何求平方根
153 0
|
Java
统计1到N的整数中,除了1和自身之外,至少还能被两个数整除的数的个数Java开方平方根
统计1到N的整数中,除了1和自身之外,至少还能被两个数整除的数的个数Java开方平方根
109 0
|
算法 Java
java学习第四天笔记-循环高级和数组-分支结构90-优化一下平方根算法
java学习第四天笔记-循环高级和数组-分支结构90-优化一下平方根算法
56 0
java学习第四天笔记-循环高级和数组-分支结构90-优化一下平方根算法
|
Java
java学习第四天笔记-循环高级和数组-分支结构88-平方根
java学习第四天笔记-循环高级和数组-分支结构88-平方根
54 0
java学习第四天笔记-循环高级和数组-分支结构88-平方根
|
算法 Java
如何使用java语言求一个正整数的平方根?(不使用库函数)
今天的这篇文章是我在刷算法题的时候遇到的,最简单的方法是直接调用java里面的Sqrt函数,不过有时候题目中会要求我们不能使用库函数,所以在这里我们自己定义Sqrt方法。 最常见的思路有两种,第一种是二分法,第二种是牛顿的微积分思想。没错,想当年大学时候学了很久很痛苦的微积分,被我第一次派上用场了。对于这两种方法我们一个一个看。
332 0
如何使用java语言求一个正整数的平方根?(不使用库函数)
|
9天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
10天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3