题目和要求如下:
这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为:0.618
小数点后4位的值为:0.6180
小数点后5位的值为:0.61803
小数点后7位的值为:0.6180340
(注意尾部的0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。
注意:尾数的四舍五入! 尾数是0也要保留!
**思路:**我们可以先试着将这个式子化简就像下图这样:
我们会发现它是有规律的分子加分母等于后一项的分母,分子是前一项的分母。符合斐波那契数列求斐波那契数列两项的比值。但是要求极度精确所以这里我们要用到BigInteger和BigDecimal分别表示大整数类和大浮点数类。
public class Main {
public static void main(String[] args) {
BigInteger a = BigInteger.ONE;
BigInteger b = BigInteger.ONE;
for(int i=3;i<500;i++) { //这里需要不断试知道后一百位的数值稳定
BigInteger t = b;
b=a.add(b);
a=t;
}
BigDecimal divide = new BigDecimal(a,110).divide(new BigDecimal(b,110),BigDecimal.ROUND_HALF_DOWN);
System.out.println(divide.toPlainString().substring(0,103));
}
}