poj 2506 Tiling 高精度

数列的通项式:ar[i]=ar[i-1]+2*ar[i-2];

View Code
 1 #include <stdio.h>
2 #include <string.h>
3
4 int ar[255][2000];
5
6 int main()
7 {
8 int n,i,j,l,pre,len[255];
9 while (scanf("%d",&n)!=EOF)
10 {
11 if(n==0)
12 {
13 printf("1\n");continue;
14 }
15 memset(ar,0,sizeof(ar));
16 len[1]=len[2]=1;
17 ar[1][0]=1;
18 ar[2][0]=3;
19 for (i=3;i<=n;i++)
20 {
21 pre=0;
22 for(j=0;j<len[i-2];j++)
23 {
24 ar[i-2][j]*=2;
25 ar[i-2][j]+=pre;
26 pre=0;
27 if(ar[i-2][j]>=10)
28 {
29 pre=ar[i-2][j]/10;
30 ar[i-2][j]%=10;
31 }
32 }
33 ar[i-2][j]+=pre;
34 l=len[i-2];
35 if(ar[i-2][len[i-2]])l++;
36 if(l<len[i-1])l=len[i-1];
37 for (j=0;j<l;j++)
38 {
39 ar[i][j]+=ar[i-2][j]+ar[i-1][j];
40 if(ar[i][j]>=10)
41 {
42 ar[i][j+1]=ar[i][j]/10;
43 ar[i][j]%=10;
44 }
45 }
46 if(ar[i][j])len[i]=l+1;
47 else len[i]=l;
48 }
49 for (i=len[n]-1;i>=0;i--)
50 {
51 printf("%d",ar[n][i]);
52 }
53 printf("\n");
54 }
55 return 0;
56 }



posted @ 2011-10-26 20:29  104_gogo  阅读(133)  评论(0编辑  收藏  举报