1. 程式人生 > >HDU-oj-Fibonacci

HDU-oj-Fibonacci

斐波那契

時間限制:1000/1000 MS(Java / Others)記憶體限制:32768/32768 K(Java / Others)
提交的總數:4869接受的提交:2199
 

問題描述

2007年到來了。經過2006年一年的修煉,數學神童zouyu終於把0到100000000的斐波納契數列
(f [0] = 0,f [1] = 1; f [i] = f [i-1] + F [I-2](I> = 2))的值全部給背了下來。
接下來,CodeStar決定要考考他,於是每問他一個數字,他就要把答案說出來,不過有的數字太長了。所以規定超過4位的只要說出前4位就可以了,可是CodeStar自己又記不住。於是他決定編寫一個程式來測驗騶虞說的是否正確。

 

輸入

輸入若干數字n(0 <= n <= 100000000),每個數字一行。讀到檔案尾。

 

產量


            輸出F [N]的前4個數字(若不足4個數字,就全部輸出)。

 

樣本輸入

0
1
2
3
4
5
35
36
37
38
39
40

 

樣本輸出

0
1
1
2
3
5
9227
1493
2415
3908
6324
1023

 

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double cnt = (1 + sqrt(5)) / 2.0;
int a[21] = { 0,1 };
int main()
{
	int n;
	double ans;
	for (int i = 2; i < 21; i++)
		a[i] = a[i - 1] + a[i - 2];
	while (cin>>n)
	{
		if (n < 21)
			printf("%d\n", a[n]);
		else
		{
			ans = -log10(sqrt(5))+ n * log10(cnt);
			ans = ans - floor(ans);
			ans = pow(10, ans);
			ans = floor(ans * 1000);	
			printf("%.0lf\n", ans);
		}
	}
	system("pause");
	return 0;
}