《JAVA筑基100例》「第19题」有一分数序列

网络空间安全

  #头条创作挑战赛#

  ❝

  ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者,CSDN博客专家,华为云享专家,掘金年度人气作者,阿里云专家博主,51CTO专家博主

  ❤️技术活,该赏

  ❤️点赞 收藏 ⭐再看,养成习惯

  ❞

  零、前言

   今天是学习 「JAVA语言」 打卡的第19天,我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真的自己实现一遍,那意味着 「JAVA语言」 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

  一、题目描述

  题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和。

  二、解题思路

  请抓住分子与分母的变化规律

  分子是前一项分子与分母的和,分母是前一项的分子

  涉及到小位数的计算,可以考虑用BigDecimal

  三、代码详解

  public class Basics19 { public static void main(String[] args) { BigDecimal molecule = new BigDecimal(2); BigDecimal denominator = new BigDecimal(1); BigDecimal t = new BigDecimal(0); BigDecimal sum = new BigDecimal(0); int i; for(i=1;i<=20;i++) { //计算其和 sum = sum.add(molecule.pide(denominator,4, BigDecimal.ROUND_HALF_UP)); //sum=sum+molecule/denominator; //把前一项的分子给t t=molecule; //计算这一项的分子 molecule=molecule.add(denominator); //把前一项的分子,给这一项的分母 denominator=t; } System.out.println(sum); }}

  不知有没有同学发现,代码中「molecule.pide()」 方法用了定义小数位的方式,为什么要这样设置呢?

  是因为不加会报错

  分析下原因:

  JAVA中如果用BigDecimal做除法的时候一定要在pide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。

  我是虚竹哥,我们下一题见~

标签: 网络空间安全