(算法-二分)浮点数二分-求一个数的三次方根
(算法-二分)浮点数二分-求一个数的三次方根
- 题目描述
- 题目分析
- 误差分析
- 二分(当n>=1时)
- (当0<=n<1时)
- (当n<0时)
- 解决方案
题目描述
给定一个浮点数 n,求它的三次方根。
输入格式
共一行,包含一个浮点数 n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。
数据范围
−10000≤n≤10000
输入样例:
1000.00
输出样例:
10.000000
题目分析
误差分析
浮点数二分没有整数二分的边界问题,只需要注意题目给出的输出格式中的保留的小数位(即误差),一般情况下,我们将误差控制在—比题目给误差还要小一百倍的时候,得出答案就不会有误差,
二分(当n>=1时)
(1)找边界,起点:l=0,终点:r=n,中点:mid=(l+r)/2。
(2)判断mid是在n的三次方根的左边,还是右边,
a.如果mid在n的三次方根的左边,那么mid的左边为无效区间,此时令l=mid,将区间缩进一半。
b.如果mid在n的三次方根的右边,那么mid的右边为无效区间,此时令r=mid,将区间缩进一半。
c.循环上两步操作,直到误差满足条件,即r-l<=1e-8时,循环停止。
d,输出人r,l都可以,他们近似相等
(当0<=n<1时)
这种情况,我们将n取倒数,求n的倒数的三次方根,然后将得到这个数,取倒数即为n的三次方根,
(当n<0时)
这种特殊情况,我们只需将n取绝对值即可,输出时注意变号,负数的三次方根一定为负数,
解决方案
import java.text.DecimalFormat;
import java.util.Scanner;public class Main {static double n;static double mid;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n=sc.nextDouble();//负数现变成正数double l=0,r=Math.abs(n);/*0到1之间的数,利用倒数先变为大于1的数,处理完数据之后,再将l变为l的倒数,*/if(r>=1) {while ((r - l) > 1e-8) {mid = (r + l) / 2;if (mid * mid * mid >= Math.abs(n))r = mid;elsel = mid;}}else {r=1/r;n=1/n;while ((r - l) > 1e-8) {mid = (r + l) / 2;if (mid * mid * mid >= Math.abs(n))r = mid;elsel = mid;}l=1/l;}DecimalFormat df = new DecimalFormat("#0.000000");if(n>=0) {System.out.println(df.format(l));}else {System.out.println(df.format(-l));}}
}
(算法-二分)浮点数二分-求一个数的三次方根相关推荐
- c语言因子优化算法,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include main() { int n,q,p,m,k=1,sum=0,s[99999]={2},t[99999];//n是输入 ...
- 利用 MPI 求素数个数
实验题目 实验题目 利用 MPI,OpenMP 编写简单的程序,测试并行计算系统性能 实验内容 两道题,每道题需要使用 MPI 和 OpenMP 分别实现: 求素数个数 实验描述: 给定正整数 n,编 ...
- 快速幂算法和大整数求模
** 1.快速幂的算法** (1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了 ...
- 求N个数的最小公倍数和最大公约数
求N个数的最小公倍数和最大公约数 可采用的算法: 1.枚举 2.辗转相除 3.更相减损术 4.Stein算法 分析得:求N个数的最小公倍数和最大公约数,需要循环调用算法函数,可以先求出两个数的最小公倍 ...
- 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)
一.二分算法简介 当我们要从一个序列中查找一个元素的时候,最简单无脑的方法就是顺序查找法,但由于在大数据情况下爆炸的时间复杂度而舍弃. 最常见的方法是二分查找,也称折半查找(Binary Search ...
- 算法基础——关于二分查找的那些事
文章目录 二分查找的思路 算法复杂度 几种不同的二分查找 1. 普通二分 2. 二分答案 3. 小数二分 二分查找的思路 二分查找也称为折半查找(binary search),适用于顺序存储结构的线性 ...
- 求n个数中第k大的数_互联网高频面试题目:「回溯算法」求组合总和
我将算法学习相关的资料已经整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面还有leetcode刷题攻略.各个类型经典题 ...
- [算法]不使用*、/、+、-、%操作符求一个数的1/3
摘要:算法一直是程序员进阶的一道龙门,通常算法都是为了更高效地解决问题而创造的,但也有的只是出于学术性,并不在意其实际意义.这是近日在国外技术问答网站stackoverflow的一个热门问题,不知道你 ...
- 算法:求两个数最大公约数
算法:求两个数最大公约数 原来这是欧几里德先生的发明,无知了,在此记录. #Python 求两数最大公约数 def gcd(a,b):if b == 0:return areturn gcd(b,a% ...
最新文章
- 交换机启用光口命令_如何在思科交换机上查询光模块状态?
- [Android]ViewSwitcher使用范例
- TabLayout+ViewPager更新fragment的ui数据
- ISA 2006 允许使用QQ
- 《系统集成项目管理工程师》必背100个知识点-94我国信息化战略目标
- java小编程----反转字符串中的每一个单词
- SecureCRT 设置和修改
- CentOS7.2安装MySql5.7并开启远程连接授权
- 行进位,超前进位 ,行波进位 ,并行进位有什么区别
- xp系统更新的服务器失败是怎么回事啊,xp系统显示“服务器错误500”的两种解决方法...
- Python秒求四位玫瑰数
- Dotnet3.5 New一个对象就可以直接跟上大括号对类中的公开成员变量以及属性赋值...
- 给定一个数值,计算最合适的行列数量的代码
- SQL Prompt教程:使用SQL提示代码分析避免T-SQL技术债务
- 20180514-A · Star Wars Survey · ggplot2 ggdraw geom_bar facet_grid magick 柱状图 条形图 · R 语言数据可视化 案例 源码
- VS中时间控件的使用
- python实现网页微信登陆_(转帖)网站微信登录-python 实现
- 高斯消元法求逆矩阵 matlab,高斯消元法与矩阵求逆
- Pathon 连接数据库
- git push failed to push some refs to xxxx 失败与解决方法