Hat's Fibonacci(大数问题)

时间:2023-12-20 14:13:50

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int a[7500][670];
void dashu()
{
memset(a,0,sizeof(a));
a[1][1]=1, a[2][1]=1, a[3][1]=1, a[4][1]=1;
int k=0;
for(int i=5;i<7500;i++)
for(int j=1;j<=670;j++)
{
k+=a[i-1][j]+a[i-2][j]+a[i-3][j]+a[i-4][j];
a[i][j]=k%10000;//每一列放四位数字,可减少循环次数节省时间
k/=10000;//k是进位数
}
}
int main()
{
int n,i,j;
dashu();
while(cin>>n)
{
for(i=670;i>=1;i--)
if(a[n][i]!=0)break;//找到首位不为零的
printf("%d",a[n][i]);//输出首位
for(j=i-1;j>=1;j--)
printf("%04d",a[n][j]);//不足四位补零
printf("\n");
}
return 0;
}