#头条创作挑战赛#
❝
❤️作者简介:大家好,我是小虚竹。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方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。
我是虚竹哥,我们下一题见~