蓝桥杯 黄金连分数(BigDecimal的使用)
标题: 黄金连分数
黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!
言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
比较简单的一种是用连分数:

这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为:0.618
小数点后4位的值为:0.6180
小数点后5位的值为:0.61803
小数点后7位的值为:0.6180340
(注意尾部的0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。
注意:尾数的四舍五入! 尾数是0也要保留!
显然答案是一个小数,其小数点后有100位数字,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
注意:由于黄金分割数是无限小数,所以在使用BigDecimal的除法时,要对结果进行精度的限制,否则BigDecimal的结果对象将是无限位的小数,导致报错。
连分数的层数设置的大一点,一开始设置100,之后设置200,逐步设置,直到答案不再变化为止(保证100位的精确度)。以下两个程序都是直接设置的1000.
法一:递归
public class Demo {
static BigDecimal bd = BigDecimal.ONE;
public static void main(String[] args) {
System.out.println(f(1000).setScale(100, BigDecimal.ROUND_HALF_UP));
}
public static BigDecimal f(int x) {
if (x == 1)
return bd;
else
return bd.divide(bd.add(f(x - 1)), 200, BigDecimal.ROUND_HALF_UP);
}
}
法二: 循环
public class Demo {
public static void main(String[] args) {
BigDecimal bd = new BigDecimal(1);
for (int i = 0; i < 1000; i++) {
bd = BigDecimal.ONE.add(bd);
bd = BigDecimal.ONE.divide(bd, 200, BigDecimal.ROUND_HALF_UP);
}
System.out.println(bd.setScale(100, BigDecimal.ROUND_HALF_UP));
}
}
这个题用到了java的小数类 BigDecimal。这个类有一些方法需要记录。
1,有加减乘除的方法,分别是add, substract,multiply,divide.他们的参数都是Bigdecimal类型的字符串。
2,有BigDecimal类型的常数, 例如BigDecimal.ONE。
3,将一个数字或者字符串转化成BigDecimal格式的数字,只需要使用传进它的构造方法就可以了。
BigDecimal abig=new BigDecimal(10.0);
4,BigDecimal有一个设置数字精度的方法,setScale,在要求精度的比赛中经常用到。他有两个参数:
第一个是数字,表示小数点后面要精确的位数, 第二个是舍入的方式。
sum.setScale(100, BigDecimal.ROUND_HALF_UP)。
5,关于舍入方式,有以下:
BigDecimal.ROUND_HALF_UP 这个是经常用到的,需要记住,就是经常使用的四舍五入。
BigDecimal.ROUND_HALF_DOWN 四舍六入。
BigDecimal.ROUND_HALF_EVEN 四舍六入,如果是五,分两种情况,如果前一位是奇数,则入位,否则舍去。
蓝桥杯 黄金连分数(BigDecimal的使用)的更多相关文章
- java实现第四届蓝桥杯黄金连分数
黄金连分数 题目描述 黄金分割数0.61803- 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜, ...
- 黄金连分数|2013年蓝桥杯B组题解析第四题-fishers
黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...
- 2012年 蓝桥杯预赛 java 本科 题目
2012年 蓝桥杯预赛 java 本科 考生须知: l 考试时间为4小时. l 参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- 2013年第四届蓝桥杯javaB组 试题 答案 解析
1.世纪末的星期 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 有趣的是,任何一个世纪末的年份的12月31日都 ...
- 2013年第四届蓝桥杯JavaB组省赛试题解析
题目及解析如下: 题目大致介绍: 第一题到第四题是结果填空,方法不限只要得到最后结果就行 第五题和第六题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 第一题 ...
- 算法笔记_109:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科B组部分习题)试题解答
目录 1 马虎的算式 2 黄金连分数 3 有理数类 4 幸运数 5 连号区间数 前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 马虎的算式 标题: 马虎的算式 小明 ...
- 第八届蓝桥杯JavaB---承压计算
标题:承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同. 金属材料被严格地堆放成金字塔形. 7 5 8 7 8 8 9 2 7 2 8 1 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
随机推荐
- http 400错误【原】
http 400错误现象: 使用java代码访问某PDF文件地址, 报了http 400错误 ,浏览器却能正常访问 . 所以猜测浏览器对地址做了额外处理. 异常代码 String srcUrl = & ...
- VMware 安装虚拟机系统
Ø 简介 本文主要介绍使用 VMware 安装虚拟机系统. 1. 创建虚拟机 1) 打开VMware,创建新虚拟机 2) 选择需要安装系统的iso镜像文件 3) 选择需要安装的Win ...
- 技术栈(technology stack)
technology stack 技术栈: 产品实现上依赖的软件基础组件, 包括 1. 系统 2. 中间件 3. 数据库 4. 应用软件 5. 开发语言 6. 框架 https://en.wikipe ...
- order by 的用法
select * from emp order by sal desc --将员工工资按照由高到低的顺序排列
- Spring AOP中 pointcut expression表达式解析
任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService 接口的任意方 ...
- [转]ANR问题分析指南
引言 每天收到无数的兄弟团队的同事向系统转ANR JIRA,有些一旦遇到App ANR就直接转到系统组,有些简单看一下就转到系统组帮忙看一下.如此浩瀚的JIRA,我们什么事不做也处理不过来,请每个Ap ...
- Request method 'POST' not supported解决办法
(1)考虑拦截器是否将该链接拦截
- 查看oracle表空间
-- 查看oracle表空间 kB, bytes MB, bytes GB from user_segments where segment_type = 'TABLE';
- selenium模块
一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被夹在 元素交互操作 其他 项目联 一 介绍 selenium最初是一个自动化测试的工具,而爬虫中使用它主要是为了解决requests无法直接 ...
- WPF实战之一 桌面消息框(右下角消息弹出框)
此版本是根据别人的项目改造的,记录下笔记 原文:https://blog.csdn.net/catshitone/article/details/75089069 一.即时弹出 1.创建弹出框 新建一 ...