【hdoj_1715】大菲波数(大数+100000000进制)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1715


本题采用大数加法即可解决.采用100000000进制速度更快.

C++代码如下:

#include<iostream>
#include<string.h>
using namespace std;

#define maxn 1000 + 1//最多算到f(1000)
#define len 1000//结果最多有1000*8位
int a[maxn][len];

int main()
{
	int i,j;
	for(i=1;i<maxn;i++)
		memset(a[i],0,sizeof(a[i]));

	a[1][len-1] = 1;//f(1)
	a[2][len-1] = 1;//f(2)

	for(i=3;i<maxn;i++)//从3开始,计算f(i)
	{
		int c = 0;
		for(j=len-1;j>=0;j--)
		{
			c += (a[i-1][j]+a[i-2][j]);
			a[i][j] = c % 100000000;//100000000进制
			c /= 100000000;
		}
	}

	int T,n;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		if(n<=2)
			printf("%d\n",1);
		else
		{
			for(i=0;i<len;i++)
				if(a[n][i])
					break;
			printf("%d",a[n][i]);
			for(j=i+1;j<len;j++)
				printf("%08d",a[n][j]);//针对100000000进制的输出方式 "%08d"
			printf("\n");
		}
	}

	return 0;
}
上述代码,提交可以通过.耗时约为15ms或31ms.

posted @ 2017-03-09 09:37  tensory  阅读(298)  评论(0编辑  收藏  举报