hdu1041 Computer Transformation

题意已经很清楚了,主要就是找递推式:

sum[i]=sum[i-1]+2*sum[i-2];

需要用到大数,不过这种普通的大数加法已经很熟了

#include<iostream>
#include<algorithm>
using namespace std;
int sum[1010][100],len[1010];
void init()
{
	sum[0][0]=0;len[0]=0;
	sum[1][0]=0;len[1]=0;
	sum[2][0]=1;len[2]=0;
	for(int i=3;i<=1000;i++)
	{
		int k,j;
		k=0;
		for(j=0;j<=len[i-2];j++)
		{
			int temp=sum[i-1][j]+sum[i-2][j]*2+k;
			k=temp/10000;
            sum[i][j]=temp%10000;
		}
		while(j<=len[i-1])
		{
			int temp=sum[i-1][j]+k;
			k=temp/10000;
			sum[i][j]=temp%10000;
			j++;
		}
		if(k!=0)
		{
			sum[i][j]=k;
			len[i]=j;
		}
		else len[i]=j-1;
	}
}
int main()
{
	init();
	int n;
	while(scanf("%d",&n)==1)
	{
		int l=len[n];
		printf("%d",sum[n][l]);
		for(int i=l-1;i>=0;i--)
			printf("%04d",sum[n][i]);
		printf("\n");
	}
	return 0;
}
原文地址:https://www.cnblogs.com/nanke/p/2246942.html