nyoj-114

大数斐波那契数列

跟hdu1250相似,不够更难做一点


#include<stdio.h>
#include<string.h>
#define N 103
#define M 800
#define base 100000000 //进制
int a[N][M];
int main()
{
    int i,j,n,x,y,z;
	while(scanf("%d%d%d",&x,&y,&z)!=EOF)
	{
		if(x==0 && y==0 && z==0)//变态测试数据0 0 0
		{
			printf("0\n");
			continue;
		}
		memset(a,0,sizeof(a));//初始化
		a[1][1]=x;
		a[2][1]=y;
		a[3][1]=z;
		for(i=4;i<N;++i)
			for(j=1;j+1<M;++j)	//j+1<M 主要是a[i][j+1]这里不能越界,也可以写j<M,
			{					//没太大影响,因为测试数据运行没那么大,无法进位
				a[i][j]+=a[i-1][j]+a[i-2][j]+a[i-3][j];
				if(a[i][j]>=base)
				{
					a[i][j+1]+=a[i][j]/base;
					a[i][j]%=base;
				}
			}
		n=100;//不能是99,跟存储有关
		for(i=M-1;i>=1;--i)
			if(a[n][i]!=0)
			{
				printf("%d",a[n][i]);
				i--;
				break;
			}
		while(i>=1)
		{
			printf("%08d",a[n][i]);
            i--;
        }
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(nyoj-114)