hdu1715 大菲波数

来源:互联网 发布:linux移植步骤 编辑:程序博客网 时间:2024/05/21 10:02
#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{int len;char c[500];}Fib[1002];void add(int x,int y){int len1,len2,i,j,k;len1=Fib[x].len;len2=Fib[y].len;for (i=0,j=0,k=0;i<len1;i++,j++){Fib[x+1].c[k]=(Fib[x].c[i]-'0'+(j<len2?(Fib[y].c[j]-'0'):0))+'0';k++;}for(i=0;i<k;i++)if((Fib[x+1].c[i]-'0')>9){if(Fib[x+1].c[i+1]==0)   Fib[x+1].c[i+1]=((Fib[x+1].c[i]-'0')/10)+'0';else   Fib[x+1].c[i+1]=((Fib[x+1].c[i+1]-'0')+(Fib[x+1].c[i]-'0')/10)+'0';Fib[x+1].c[i]=((Fib[x+1].c[i]-'0')%10)+'0';}if(Fib[x+1].c[len1]!=0)//两数相加最多进一位Fib[x+1].len=len1+1;else    Fib[x+1].len=len1;}int main(){int n,pi,i;strcpy(Fib[1].c,"1");Fib[1].len=1;strcpy(Fib[2].c,"1");Fib[2].len=1;for(i=3;i<=1001;i++)add(i-1,i-2);scanf("%d",&n);while(n--){scanf("%d",&pi);for(i=Fib[pi].len-1;i>=0;i--)    printf("%d",(Fib[pi].c[i]-'0'));printf("\n");}return 0;}

原创粉丝点击