Fibonacci数列
题目网址http://acm.hdu.edu.cn/showproblem.php?pid=1715
//15Ms
//离线方式
其实之后看来这就是水的不行的算法,就是用数组的形式来做的,但是之后做到类似于斐波那契数列的时候,那运算如果这样做的话数组开的肯定也是不够的,所以这还是需要更加精准的算法了,例如运用快速幂等进行运算,详见博主博客
//整体的思路就是将低位放在前面,这样的话就比较简单,并且进位简单
#include <iostream>
#include <cstring>
using namespace std;
int a[1001][1001];
int count[1001];//记录第几个数有多少位
int main ()
{
memset(a,0,sizeof(a));
a[1][1]=a[2][1]=1;
count[1]=count[2]=1;
int i,j,k;
for(i=3;i<=1000;i++)
{
k=0;
for(j=1;j<=count[i-1];j++)//由于
{
k++;
a[i][k]=a[i-1][j]+a[i-2][j]+a[i][k];//将前两个数的对应位想加,并且有进位
if(a[i][k]>9)
{
a[i][k+1]=a[i][k]/10;
a[i][k]=a[i][k]%10;//低位
if(j==count[i-1])//如果是最后一位的话,需要将k加一,要不然最后一位就没有了
k++;
}
}
count[i]=k;//记录下当前的有多少位
}
scanf("%d",&k);
while(k--)
{
cin>>i;
for(j=count[i];j>=1;j--)
printf("%d",a[i][j]);
printf("
");
}
return 0;
}