zoj1828

题目大意:

输出第N个Fibonacci数列

解题思路:

大数计算,采用打表的方法,把满足题目数量的Fibonacci数先保存下来,然后取出就可以了

代码如下:

#include 
#include 
#include 
char ad[4801][1100];
void add(char a[],char b[],char back[])
{
    int i,j,k,up,x,y,z,l;
    char *c;
    if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
    c=(char *) malloc(l*sizeof(char));
    i=strlen(a)-1;
    j=strlen(b)-1;
    k=0;up=0;
    while(i>=0||j>=0)
        {
            if(i<0) x='0'; else x=a[i];
            if(j<0) y='0'; else y=b[j];
            z=x-'0'+y-'0';
            if(up) z+=1;
            if(z>9) {up=1;z%=10;} else up=0;
            c[k++]=z+'0';
            i--;j--;
        }
    if(up) c[k++]='1';
    i=0;
    c[k]='\0';
    for(k-=1;k>=0;k--)
        back[i++]=c[k];
    back[i]='\0';
} 

int main()
{

   int i;
   strcpy(ad[1],"1");
   strcpy(ad[2],"1");
   for (i=3;i<=4800;i++)
   {
      add(ad[i-2],ad[i-1],ad[i]);
   }
   while (scanf("%d",&i)+1)
   {
      printf("%s\n",ad[i]);
   }

   return 0;
}

你可能感兴趣的:(zoj)