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("\n"); } return 0; }