题目 2311: [蓝桥杯][2019年第十届真题]Fibonacci 数列与黄金分割

原题链接
大佬题解
看到N值可能很大,就想用BigInteger或者BigDecimal数据结构,但是这样就不好让这么大的数相除并保留八位小数了
然后看到大佬题解说,其实就算是BigInteger也装不下那么大的数,还得取巧,关键就在于前一项与后一项的比值,F[i]/F[i + 1], 会趋近于黄金分割,而黄金分割是一个固定的数值,所以i值达到一定程度,F[i]/F[i + 1]的前八位小数就会相同,经过实验,发现N大于20时,前八位小数就一样了

import java.util.Scanner;
 
public class C2311_1
{
public static void main(String[] args)
{
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
    if(n<20)
    {
        double a=1;
        double b=1;
        for(int i=3;i<=n+1;i++)
        {
            double t=b;
            b=b+a;
            a=t;
        }
        System.out.println(String.format("%.8f",(a/b)));        //保留8位小数
    }
    else
        System.out.println("0.61803399");
    scan.close();
}
}

你可能感兴趣的:(蓝桥杯,蓝桥杯,java,职场和发展)