XD

为了将来,拼了!~

杭电ACM1568——Fibonacci

巧用数学公式,两边去对数来算。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n;
	int fib[21] = {0, 1, 1};
	for(int i = 3; i < 21; i++)
		fib[i] = fib[i - 1] + fib[i - 2];
	while(cin >> n)
	{
		if(n <= 20)
			cout << fib[n] << endl;
		else
		{
			double ans = -0.5 * log10(5.0) + n * log10((1.0 + sqrt(5)) / 2.0);
			ans = ans - floor(ans);
			ans = pow(10, ans);
			cout << (int)(ans * 1000) << endl;
		}
	}
	return 0;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25425023/article/details/49928587
文章标签: acm 杭电
个人分类: 杭电
上一篇杭电ACM1717——小数化分数2
下一篇杭电ACM1997——汉诺塔VII
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭