1. 程式人生 > >藍橋杯第四屆 黃金連分數(大數 斐波那契數列與黃金分割)

藍橋杯第四屆 黃金連分數(大數 斐波那契數列與黃金分割)


題目描述
標題: 黃金連分數
黃金分割數0.61803... 是個無理數,這個常數十分重要,在許多工程問題中會出現。有時需要把這個數字求得很精確。
對於某些精密工程,常數的精度很重要。也許你聽說過哈勃太空望遠鏡,它首次升空後就發現了一處人工加工錯誤,對那樣一個龐然大物,其實只是鏡面加工時有比頭髮絲還細許多倍的一處錯誤而已,卻使它成了“近視眼”!!
言歸正傳,我們如何求得黃金分割數的儘可能精確的值呢?有許多方法。
比較簡單的一種是用連分數:

                                1
    黃金數 = ---------------------
                                 1
                  1 + -----------------
                                   1
                        1 + -------------
                                        1
                               1 + ---------
                                       1 + ...

這個連分數計算的“層數”越多,它的值越接近黃金分割數。
請你利用這一特性,求出黃金分割數的足夠精確值,要求四捨五入到小數點後100位。
小數點後3位的值為:0.618
小數點後4位的值為:0.6180
小數點後5位的值為:0.61803
小數點後7位的值為:0.6180340
(注意尾部的0,不能忽略)
你的任務是:寫出精確到小數點後100位精度的黃金分割值。
注意:尾數的四捨五入! 尾數是0也要保留!
顯然答案是一個小數,其小數點後有100位數字,請通過瀏覽器直接提交該數字。
注意:不要提交解答過程,或其它輔助說明類的內容。

——————————————————————————————————
中國大學視訊公開課 南開大學公開課:數學文化

斐波那契數列與黃金分割                

http://open.163.com/movie/2011/12/H/S/M7KV3072J_M89ASJKHS.html ——————————————————————————————————
# include <stdio.h>

int main()
{
	long long int fib[1000];
	fib[0] = 1;
	fib[1] = 1;
	
	for(int i = 2; i<=1000; i++)
	{
		fib[i] = fib[i - 1] + fib[i - 2];
	}


	 long long int x = fib[78];
	 long long int y = fib[79];
	
	for(int i = 0; i < 101; i++)
	{
		int ans = x / y;
		x = (x % y) * 10;
		printf("%d", ans);
	}
	return 0; 
}