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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43411988/article/details/84703217