计算第n个Fibonacci数,
我是一个一个计算的,感觉自己的速度很慢,在一个地方看到一个用的是全部计算出来,然后去选,试了一下,比我的还慢
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int Max = 1010;
void add(int a[],int b[],int c[])
{
int i;
memset(c,0,sizeof(int) * Max);
for(i = 0;i < Max;++i)
c[i] = a[i] + b[i];
for(i = 0;i < Max;++i)
{
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
void print(int a[])
{
int i;
for(i = Max - 1;i >= 0 && a[i] == 0;--i);
if(i < 0) cout << 0 << endl;
else
{
for(i;i >= 0;--i)
cout << a[i];
cout << endl;
}
}
int main(void)
{
int n,k,i;
int a[Max],b[Max],c[Max];
while(cin >> n)
{
if(n <= 2)
cout << 1 << endl;
else if(n == 3) cout << 2 << endl;
else
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
a[0] = 1;b[0] = 1;c[0] = 2;
k = n / 3;
for(i = 1;i < k;++i)
{
add(b,c,a);
add(c,a,b);
add(a,b,c);
}
if(n % 3 == 0) print(c);
else if(n % 3 == 1)
{
add(b,c,a);
print(a);
/*cout << "good ,but why it's wrong" << endl;*/
}
else
{
add(b,c,a);
add(c,a,b);
print(b);
}
}
}
system("pause");
return 0;
}