题目: 打印输出斐波拉契数列的位数,以及对应的黄金分割值的准确位数,例如(11,4),既是利用11位的斐波拉契数列计算得到的黄金分割数可以准确到小数点后四位。设定一个具体的精确度(例如小数点后10位),当所计算的黄金分割达到该精确度后中断程序,并给出此时斐波拉契数列的位数。

代码实现:

package library;
import java.util.*;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class Fib {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.print("Please input the digit of the Fibonacci:");int num = in.nextInt();in.close();MathContext mc1 = new MathContext(num, RoundingMode.HALF_DOWN);       //num为精确度得位数,HALF_DOWN表示采取四舍五入,例如0.618 -- 0.62BigDecimal sqr_5 = NewtonSqrt(5);//System.out.println(sqr_5);BigDecimal sub = new BigDecimal("1");BigDecimal divisor=new BigDecimal("2");BigDecimal Golden_ratio =(sqr_5.subtract(sub)).divide(divisor, mc1);       //按照用户输入的精确度计算所得黄金分割比率,注:末位是真值,不是约分所得,便于后续比较    BigDecimal fi[] = new BigDecimal[2];BigDecimal precision = new BigDecimal("1").divide(new BigDecimal("10").pow(num));//System.out.println(precision);System.out.println(precision+"精度下得黄金分割比为:"+Golden_ratio);fi[0]=new BigDecimal("1");fi[1]=new BigDecimal("1");int count = 2;while(true) {int length=fi.length;BigDecimal FI[] = new BigDecimal[length+1];for(int i=0;i<length;i++) {FI[i]=fi[i];}FI[length] = fi[length - 1].add(fi[length - 2]);fi=FI;     //更新斐波纳契数列++count;MathContext mc2 = new MathContext(num+1, RoundingMode.DOWN);BigDecimal consult = fi[length-1].divide(fi[length], mc2);       //新斐波纳契数列末两位之比,保留精度为小数点后num+1BigDecimal SUB = consult.subtract(Golden_ratio);if(SUB.compareTo(precision)==-1&&SUB.compareTo(BigDecimal.ZERO)==1)break;}//输出斐波纳契数列for(int i=0;i<fi.length;i++) {if(i%10==0 && i!=0)System.out.print(" \n\t"+fi[i]);elseSystem.out.print("\t"+fi[i]+" ");}System.out.println("\n("+count+","+num+")");}static BigDecimal NewtonSqrt(double inC)  //求高精度sqrt(inC),C>1{MathContext mc = new MathContext(9999, RoundingMode.HALF_DOWN);//精确度为9999位BigDecimal pre=BigDecimal.valueOf(1);//初始值BigDecimal now=null;BigDecimal C=BigDecimal.valueOf(inC);BigDecimal half=BigDecimal.valueOf(0.5);for(int i=1;i<=100;i++)             //迭代100次{now=half.multiply(pre.add(C.divide(pre,mc)));//保留小数点后120pre=now;}return now;}
}

`

Java实现斐波那契数列与黄金分割比精确位数问题相关推荐

  1. java判断斐波那契数列_Java 实例 - 斐波那契数列

    Java 实例 - 斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597, ...

  2. 数学之美|斐波那契数列与黄金分割

    14天阅读挑战赛 系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|指数型函数对算法的影响实际应用 d ...

  3. Java实现斐波那契数列Fibonacci

    import java.util.Scanner; public class Fibonacci {public static void main(String[] args) {// TODO Au ...

  4. Think in Java之斐波那契数列

    斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 指的是这样一个数列:1.1.2.3.5.8.13.21.--这个数列从第三项开始,每一项都等于前两项之和. 在数学上,斐波纳契 ...

  5. 【java】斐波那契数列

    开门见山 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列 ...

  6. java实现斐波拉契数列

    package algorithm.cxg.Fibonacci;import java.util.Scanner;/*** 实现斐波拉切函数* 斐波拉切数列:* 由0和1开始,之后的费波那西系数就由之 ...

  7. JAVA实现斐波那契数列问题(《剑指offer》)

    题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. 传说中的斐波那契数列问题,经典中的经典: 做多了基于斐波那契数列问题的变形题目,现在要干撸斐波那契数列,突然 ...

  8. java解决斐波那契数列(Fibonacci sequence)

    斐波那契数列(Fibonacci sequence)的定义:斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610 ...

  9. Java基础——斐波那契数列问题之兔子不死会有几只兔子

    已知:斐波那契数列的前几个数分别为0,1,1,2,3,5-从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项. 效果如图: 思路://              0,  ...

最新文章

  1. 一句话总结K均值算法
  2. 现场总线和工业以太网
  3. Nginx 提示host not found in upstream 错误解决方法
  4. JavaScript是如何工作的:使用MutationObserver跟踪DOM的变化
  5. 小程序 - 学习笔记
  6. 使用Nuget 安装指定版本package或者更新package到指定版本
  7. 存储过程实现邮件发送
  8. (盒子模型常见问题)外边距合并问题,嵌套盒子边距塌陷问题解决
  9. AD的备份与标准还原:深入浅出Active Directory系列(四)
  10. 电商大促特辑:蘑菇街致美丽新世界的架构礼
  11. 应用安全 - 工具使用 - Nmap
  12. (译)响应式图片— srcset 和 sizes 属性
  13. 【支付】第三方易宝支付
  14. 前端学习——Js(JavaScript)入门
  15. 计算机吴军科学家个人故事,吴军:阅读与写作50讲+吴军个人成长书单
  16. 哪里有电,哪里就应该有网络 ,华为移动路由Pro评测
  17. 2016.1云南之旅
  18. IOS如何发送大文件到QQ
  19. 【英语阅读】纽约时报 | 你妈注定让你抓狂
  20. localhost拒绝了我们的连接请求

热门文章

  1. 第一届创享杯 服务器部分题解
  2. 9.0系统登录 服务器,游戏工作室来袭!魔兽9.0经济系统与服务器负荷再次面临考验...
  3. java实现debounce_Rxjava debounce 操作符
  4. go语言gob序列化指针无法寻址报错
  5. HEAD区元素的整理
  6. 如何利用Java,Javaweb开发网站
  7. 手机必备epub阅读软件
  8. 5.7mysql 多线程slave
  9. 【linux部署前端项目】
  10. html自动跳转源码,两款404页面自动跳转源码html