代码编织梦想

算法功底是程序员的灵魂,设计模式是程序员的骨架。


实现 int func(int n) 函数,或者int n换成double n

n整型时:假如返回类型是整数,结果只保留整数的部分,小数部分将被舍去;
n是double时,保留小数点后3位

(1)二分法求解(可以再优化)

public class Test02 {

	public static void main(String[] args) {
		// FIXME 这里用5来测试
		double N = 5;
		System.out.println(N + " 开根号保留三位小数后的值是:" + String.format("%.3f", func(N)));
	}

	static double func(double N) {
		double middle = 0;
		double left = 0;
		double right = N;

		// 这里以保留小数点后三位为例,保留小数点后三位对应的就是"1e-3"
		while (right - left > 1e-3) {
			// 第(1)步:middle = (left + right) / 2
			middle = (left + right) / 2;
			if (middle * middle < N) {
				// 第(2.1)步:如果middle * middle < N,说明middle太小,需要往右找,下一次让left = middle,跳到第(1)步
				left = middle;
			} else {
				// 第(2.2)步:如果middle * middle >= N,说明middle够大了,需要往左逼近,下一次让right=middle,跳到第(1)步
				right = middle;
			}
			// (3)直到right-left的差值精度在10的-3次方:1e-3,说明精度满足了"保留3位小数"的要求
			System.out.println("left:" + left + ",right:" + right + ",middle:" + middle);
		}

		return middle;
	}

}

运行结果:

left:0.0,right:2.5,middle:2.5
left:1.25,right:2.5,middle:1.25
left:1.875,right:2.5,middle:1.875
left:2.1875,right:2.5,middle:2.1875
left:2.1875,right:2.34375,middle:2.34375
left:2.1875,right:2.265625,middle:2.265625
left:2.2265625,right:2.265625,middle:2.2265625
left:2.2265625,right:2.24609375,middle:2.24609375
left:2.2265625,right:2.236328125,middle:2.236328125
left:2.2314453125,right:2.236328125,middle:2.2314453125
left:2.23388671875,right:2.236328125,middle:2.23388671875
left:2.235107421875,right:2.236328125,middle:2.235107421875
left:2.2357177734375,right:2.236328125,middle:2.2357177734375
5.0 开根号保留三位小数后的值是:2.236

(2)牛顿迭代法求解(待补充)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32649581/article/details/126983055

开根号的几类算法总结_dave-li的博客-爱代码爱编程_开根号算法

  首先是最基本的二分开根号,这个比较容易理解,复杂度比起下面讲的牛顿迭代法要高,更容易理解。  下面给出代码: #define eps 0.00001 float SqrtByDichotomy(float n) {     if(n<0)     {         return -1.0;     }     else     {     

根号算法:分块-爱代码爱编程

导入 众所周知,我们熟悉的算法时间复杂度有常数级,对数级、线性级、次方级、指数级等等,其中为应对题目规模对时间复杂度的要求,我们一般要将算法的时间复杂度优化到对数级,但是实际上我们还有一种优化方法——根号算法,它的时间复杂度为级,同样可以应对大部分的题目规模,并且具有相当大的可拓展性。和对数算法基本对应分治类似,根号算法也对应着一种操作,就是本篇博客要

根号算法:莫队算法-爱代码爱编程

导入 莫队算法,也算是一个黑科技算法,能切掉好多区间题啊,和分块一样属于一个ACMer/IOer必备的算法,而由于莫队算法里面用到了一点点分块的内容,所以先弄懂分块还是有必要的。同时由于和分块扯上了关系,那么它的时间复杂度也就自然而然地是根号级别的了,能解决的数据规模还是挺大的。ok,那么莫队算法到底是什么呢,下面就来介绍这个黑科技算法。 普通莫队

(算法练习)——开根号法求素数-爱代码爱编程

《算法笔记》P162 关于数学的算法题,所以本质还是数学题? 代码: #include <stdio.h> #include <math.h> //判断是否为素数 bool isPrime(int n){ if(n <= 1) return false; int sqr = (int)sqrt(1.0*n); for

【每日算法Day 67】经典面试题:手动开根号,你知道几种方法?-爱代码爱编程

题目链接 LeetCode 69. x 的平方根[1] 题目描述 实现 int sqrt(int n) 函数。 计算并返回   的平方根,其中  是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例1 输入: 4 输出: 2 示例2 输入: 8 输出: 2 解释: 8 的平方根是 2.

【蓝桥杯】试题 算法提高 编程求解根号3-爱代码爱编程

** 【蓝桥杯】试题 算法提高 编程求解根号3 ** 问题描述   进行数学运算是计算机的主要能力,利用计算机的重复计算能力可以帮助人们求解一些十分复杂的数学运算,比如高次方程、求根,求平方等。根号运算是数学的基本运算,对于无理数的求解,我们可以使用两边取值,不断逼近的方法进行求解。现要求你编程实现根号3的求解。 输入格式   无输入 输出格式   输

【算法】求开根号,使用二分法-爱代码爱编程

一个算法题:使用二分法求一个数的开根号的值。 思路:取中间值,计算中间值的平方是否等于这个值?            1、如果等于,则返回中间值(就是结果值);            2、如果大于,那取下方的区间,继续求值;            3、如果小于,那取上方的区间,继续求值。 大致的思路就是这样,需要考虑的是保留几位小数的问题,如果中

试题 算法提高 编程求解根号3(C++)-爱代码爱编程

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   进行数学运算是计算机的主要能力,利用计算机的重复计算能力可以帮助人们求解一些十分复杂的数学运算,比如高次方程、求根,求平方等。根号运算是数学的基本运算,对于无理数的求解,我们可以使用两边取值,不断逼近的方法进行求解。现要求你编程实现根号3的求解。 输入格式   无输入 输出格式   输出

算法题:纯质数-爱代码爱编程

题目来源: 第十二届蓝桥杯国赛Java B组试题           题目解析 此题按照正常的思路应该是遍历数值n,找到n所有的素数然后在对的出来的所有素数各个数字进行判断,属于2,3,5,7即可。 但此题给的n=20210605,一个八位的数字,滋补小铺 如果单纯按照上面的思路进行实现,计算时间将会变得非常漫长。 这里我们可以使用埃氏筛法,快速找

试题 算法提高 编程求解根号3-爱代码爱编程

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   进行数学运算是计算机的主要能力,利用计算机的重复计算能力可以帮助人们求解一些十分复杂的数学运算,比如高次方程、求根,求平方等。根号运算是数学的基本运算,对于无理数的求解,我们可以使用两边取值,不断逼近的方法进行求解。现要求你编程实现根号3的求解。 输入格式   无输入 输出格

c++ 开根号程序 算法实现 C++函数同时返回两个值-爱代码爱编程

#pragma once #include<iostream> #include<string> using namespace std; 程序的头文件 prectise.h 有些时候,我们需要c++的函数返回多个程序代码的过程值,两个以上。 但是一般而言,C++仅允许返回一个值,或者说一个参数;当然,向量和矩阵可以返回两个以

面试高频算法题:求平方根,精确到小数点后n位(Java)-爱代码爱编程

前几天面美团的时候被问到了这个问题,自己处理的不是很好,在此重新总结一下。 面试题目要求:求某正整数的平方根,要求误差小于0.01 //二分法进行处理,注意变量类型 public static double sqrt(int target){ double n=1e-2; //在这里可根据精度要求进行调整

力扣算法题:X的平方根-爱代码爱编程

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 来源:力扣(LeetCode) 解题思路:这题是看题解,这里使用了二分查找的方法,使用双指针 class Solution:

leetcode高频题1:二分法求开根号sqrt(x),保留3位小数,速度快,简单_冰露可乐的博客-爱代码爱编程

LeetCode高频题1:二分法求开根号sqrt(x),保留3位小数,速度快,简单 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目互联网大厂们在公司养了一大批ACM竞赛的大佬们,吃完饭就是设计考题,然后去考应聘人员,你要做的就是学基础树结构与算法,然后打通任督二脉,以应对波云诡谲

经典面试题:如何快速求解根号2?-爱代码爱编程

关注下方公众号,分享硬核知识 作者 | 小K 出品 | 公众号:小K算法 (ID:xiaok365) 01 故事起源 有一次小K去面试,面试官问我怎么求解根号2,这还用求,不就是1.414... 原来他是想让我用代码来实现求解根号2。 那还不简单吗,一行代码搞定。 然后,就没有然后了,下一个。。

opengl进阶(二)之像素缓冲pixelbuffer_gl_pixel_pack_buffer-爱代码爱编程

本系列文章为Learn OpenGL个人学习总结! OpenGL入门(一)之认识OpenGL和创建Window OpenGL入门(二)之渲染管线pipeline,VAO、VBO和EBO OpenGL入门(三)之着色器Shad

顺序表(c++实现)_顺序表前驱后继-爱代码爱编程

数据结构(面向对象方法与C++语言描述)(第2版)线性表内容整理 顺序表 顺序表是基于数组的线性表的存储表示,其特点是用物理位置上的邻接关系来表示结点间的逻辑关系。 优点: (1)无需为表示结点间的逻辑关系而增加额外

leetcode-爱代码爱编程

1、动态规划法 由于我们在转化单词时需要考虑单词中字母的顺序,英雌更适合使用动态规划法进行解决。我们定义数组 d