Sweety

Practice makes perfect

导航

大菲波数

Posted on 2014-09-19 20:29  蓝空  阅读(181)  评论(0编辑  收藏  举报

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;
}