//比较简单的一种是用连分数:
// 1
//黄金数 = ---------------------
// 1
// 1 + -----------------
// 1
// 1 + -------------
// 1
//
// 1 + ---------
// 1 + ...
//
//这个连分数计算的“层数”越多,它的值越接近黄金分割数。
//请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
//小数点后3位的值为:0.618
//小数点后4位的值为:0.6180
//小数点后5位的值为:0.61803
//小数点后7位的值为:0.6180340
//你的任务是:写出精确到小数点后100位精度的黄金分割值。
//注意:尾数的四舍五入! 尾数是0也要保留!
public class lanqiao2013_4 {
public static void main(String[] args) {
//斐波拉契数列的前一项比后一项就近似的为黄金分割比
long [] fib = new long [100];
fib[0]=1l;
fib[1]=1l;
for(int i=2;i<=99;i++){
fib[i]=fib[i-1]+fib[i-2];
}
//去大一点的两个数 模拟手算
//然后再去下一组数,判断是否收敛 若收敛 则不变
long x, y;
StringBuffer sb = new StringBuffer("");
x = fib[48];//拿到被除数
y = fib[49];//拿到除数
//模拟手算
System.out.println("x:"+x);
System.out.println("y:"+y);
for(int k=1;k<=101;k++){
int resulti = (int) (x / y);
System.out.println(resulti);
x = (x%y)*10;
System.out.println(x%y);
sb.append(resulti);
}
System.out.println(sb.toString());
}
}
模拟手算除法可以保存精度很高的尾数