原题链接
关于斐波那契数列,维基百科有很全面的说明!http://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B8
此题高精度做斐波那契数列 简直是不可能的 数量级太大了,通式 和 对数的性质 解决了此题。
还是注意,HDU用的是所有标准库都未进行整数重载的 C++,提交C++的时候应该注意 数学库函数中是否有整数形参调用!比如log(10)是非法的!必须是log(10.0)!!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const double sq5 = sqrt(5.00);
double val(double n)
{
return ( log (1.0 / sq5) + n * log (0.5 * (double)(1 + sq5)))/log (10.0);
}
int b[110];
int main()
{
int a, i;
b[0] = 0;
b[1] = b[2] = 1;
for (i = 3; i<100; i++)
{
b[i] = b[i-1] + b[i-2];
}
while (cin>>a)
{
double temp = val((double )a);
if (temp - 4 > 1e-6)
{
cout <<(int)(1000*pow(10.0, (double)(temp - floor(temp))))<<endl;
}
else
cout<<b[a]<<endl;
}
return 0;
}