(算法-二分)浮点数二分-求一个数的三次方根

  • 题目描述
  • 题目分析
    • 误差分析
    • 二分(当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));}}
}

(算法-二分)浮点数二分-求一个数的三次方根相关推荐

  1. c语言因子优化算法,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include main() { int n,q,p,m,k=1,sum=0,s[99999]={2},t[99999];//n是输入 ...

  2. 利用 MPI 求素数个数

    实验题目 实验题目 利用 MPI,OpenMP 编写简单的程序,测试并行计算系统性能 实验内容 两道题,每道题需要使用 MPI 和 OpenMP 分别实现: 求素数个数 实验描述: 给定正整数 n,编 ...

  3. 快速幂算法和大整数求模

    ** 1.快速幂的算法** (1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了 ...

  4. 求N个数的最小公倍数和最大公约数

    求N个数的最小公倍数和最大公约数 可采用的算法: 1.枚举 2.辗转相除 3.更相减损术 4.Stein算法 分析得:求N个数的最小公倍数和最大公约数,需要循环调用算法函数,可以先求出两个数的最小公倍 ...

  5. 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)

    一.二分算法简介 当我们要从一个序列中查找一个元素的时候,最简单无脑的方法就是顺序查找法,但由于在大数据情况下爆炸的时间复杂度而舍弃. 最常见的方法是二分查找,也称折半查找(Binary Search ...

  6. 算法基础——关于二分查找的那些事

    文章目录 二分查找的思路 算法复杂度 几种不同的二分查找 1. 普通二分 2. 二分答案 3. 小数二分 二分查找的思路 二分查找也称为折半查找(binary search),适用于顺序存储结构的线性 ...

  7. 求n个数中第k大的数_互联网高频面试题目:「回溯算法」求组合总和

    我将算法学习相关的资料已经整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面还有leetcode刷题攻略.各个类型经典题 ...

  8. [算法]不使用*、/、+、-、%操作符求一个数的1/3

    摘要:算法一直是程序员进阶的一道龙门,通常算法都是为了更高效地解决问题而创造的,但也有的只是出于学术性,并不在意其实际意义.这是近日在国外技术问答网站stackoverflow的一个热门问题,不知道你 ...

  9. 算法:求两个数最大公约数

    算法:求两个数最大公约数 原来这是欧几里德先生的发明,无知了,在此记录. #Python 求两数最大公约数 def gcd(a,b):if b == 0:return areturn gcd(b,a% ...

最新文章

  1. 交换机启用光口命令_如何在思科交换机上查询光模块状态?
  2. [Android]ViewSwitcher使用范例
  3. TabLayout+ViewPager更新fragment的ui数据
  4. ISA 2006 允许使用QQ
  5. 《系统集成项目管理工程师》必背100个知识点-94我国信息化战略目标
  6. java小编程----反转字符串中的每一个单词
  7. SecureCRT 设置和修改
  8. CentOS7.2安装MySql5.7并开启远程连接授权
  9. 行进位,超前进位 ,行波进位 ,并行进位有什么区别
  10. xp系统更新的服务器失败是怎么回事啊,xp系统显示“服务器错误500”的两种解决方法...
  11. Python秒求四位玫瑰数
  12. Dotnet3.5 New一个对象就可以直接跟上大括号对类中的公开成员变量以及属性赋值...
  13. 给定一个数值,计算最合适的行列数量的代码
  14. SQL Prompt教程:使用SQL提示代码分析避免T-SQL技术债务
  15. 20180514-A · Star Wars Survey · ggplot2 ggdraw geom_bar facet_grid magick 柱状图 条形图 · R 语言数据可视化 案例 源码
  16. VS中时间控件的使用
  17. python实现网页微信登陆_(转帖)网站微信登录-python 实现
  18. 高斯消元法求逆矩阵 matlab,高斯消元法与矩阵求逆
  19. Pathon 连接数据库
  20. git push failed to push some refs to xxxx 失败与解决方法

热门文章

  1. 高并发,你真的理解透彻了吗?
  2. 《原子习惯》读书分享
  3. linux内核态加速文件读取,学习在kernel态下使用NEON对算法进行加速的方法
  4. cpu核数和逻辑个数的区别_cpu 核心数与线程数
  5. c语言中有余数的除法,《有余数的除法》课堂实录
  6. 基于vuex的物业管理系统APP及网页后台设计
  7. 无法将值vmware-tray.exe写入注册表
  8. 为什么黑客都用Python?
  9. 一、2440裸机点亮led
  10. PostgreSQL数据库WAL——备机回放checkpoint WAL