zoj1828

来源:互联网 发布:linux 创建u盘启动盘 编辑:程序博客网 时间:2024/06/05 19:15

题目大意:

输出第N个Fibonacci数列

解题思路:

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

代码如下:

#include <stdio.h>#include <string.h>#include <stdlib.h>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;}
0 0
原创粉丝点击