这一提数据太大,考虑缩进数组每一位存储10的8次方
然后利用大数相加
代码:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; long long int num[10000][260]; int main() { int i,j,n; memset(num,0,sizeof(num)); num[1][0]=1;num[2][0]=1;num[3][0]=1;num[4][0]=1; for(i=5;i<10000;i++) { for(j=0;j<260;j++) num[i][j]=num[i-1][j]+num[i-2][j]+num[i-3][j]+num[i-4][j]; for(j=0;j<260;j++){ if(num[i][j]>=100000000) { int tem=num[i][j]/100000000; num[i][j]=num[i][j]%100000000; num[i][j+1]+=tem; } } } while(cin>>n){ for(i=259;i>0;i--) if(num[n][i]!=0) break; cout<<num[n][i]; for(j=i-1;j>=0;j--) printf("%08d",num[n][j]); cout<<endl; } return 0; }