技巧:每个数组代表四位数,可以缩小位数,减少内存需求!
#include<stdio.h> #include<string.h> //F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4) int f[7500][671]; void solve() { int i,j; memset(f,0,sizeof(f)); f[1][0]=1; f[2][0]=1; f[3][0]=1; f[4][0]=1; for(i=5;i<7500;i++) { for(j=0;j<=670;j++) f[i][j]+=(f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j]); for(j=0;j<=670;j++) if(f[i][j]>=10000) { f[i][j+1]+=f[i][j]/10000; f[i][j]=f[i][j]%10000; } } } void prin(int n) { int i,j,flag; int len=0; flag=0; for(i=670;i>=0;i--) { if(f[n][i]!=0 && flag==0) { flag=1; printf("%d",f[n][i]); continue; } if(flag) { printf("%04d",f[n][i]); } } printf("\n"); //printf("%d\n",len); } int main() { int i,j,n; solve(); /* for(i=7090;i<=7090;i++) { if(i==100) { printf("*****************\n"); prin(i); } else prin(i); } */ while(scanf("%d",&n)==1) { prin(n); } }
Hat's Fibonacci
最新推荐文章于 2023-10-09 02:02:27 发布