题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1568
思路
参考了大神的对数解法:
http://www.cnblogs.com/Yu2012/archive/2011/10/09/2199156.html
代码:
#include<iostream>
#include<math.h>
using namespace std;
int Fib(int n)
{
if (n == 0)
return 0;
else
return n < 2 ? 1 : (Fib(n - 1) + Fib(n - 2));
}
int main()
{
int n;
double f = (sqrt(5.0) + 1) / 2;
double a;
while (cin >> n)
{
if (n < 21)
{
cout << Fib(n) << endl;
}
else {
a = -0.5*log10(5.0) + n*log10(f);
a = a - int(a);
a = pow(10.0, a);
while (a < 1000)
{
a *= 10;
}
cout << (int)a << endl;
}
}
return 0;
}