蓝桥杯2013Java组省赛(黄金队列——模拟手算除法)

//比较简单的一种是用连分数:
//              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());
		}
}

模拟手算除法可以保存精度很高的尾数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值