/*
解題人:lingnichong
解題時間:2014-10-18 23:48:54
解題體會:一開始用數組存一位的話顯得有點浪費,還容易超內存,數組開小了,又會顯示訪問到未知內存,可以每個數組的每個位上存上100000這樣大的數。
*/
100
4203968145672990846840663646 Note: No generated Fibonacci number in excess of 2005 digits will be in the test data, ie. F(20) = 66526 has 5 digits.
#include#include int a[8000][1000]; int main() { int i,j,k,len,t,p; memset(a,0,sizeof(a)); a[1][0]=1;a[2][0]=1; a[3][0]=1;a[4][0]=1; for(i=5;i<8000;i++) { for(j=1000-1;j>=0;j--) if(a[i-1][j]!=0) break; for(k=0;k<=j;k++) { a[i][k]+=(a[i-1][k]+a[i-2][k]+a[i-3][k]+a[i-4][k]); if(a[i][k]>=100000)//每一位數組存下100000,滿五位進一 { p=a[i][k]; a[i][k]%=100000; a[i][k+1]+=(p/100000); } } } while(~scanf("%d",&t)) { for(i=1000-1;(i>=0)&&(a[t][i]==0);i--); printf("%d",a[t][i--]);//輸出一開始輸出的第一位數字, for(;i>=0;i--) printf("%.5d",a[t][i]);//後面每五位輸出次,因為是每五位進一 printf("\n"); } return 0; }