(关于卡特兰数的详细介绍)http://baike.baidu.com/view/2499752.htm 

下面有练习的题目:

经过测试,_int64/long long 最大只能表示到33位,超过这个范围就要用大数来表示。。。

有几个重要的公式是要记得的

F(n)=f(n-1)*(4*n-2)/(n+1);

还有 f(n)=C(2n,n)/(n+1);

或者 f(n)=c(2n,n)-c(2n,n+1);

http://acm.hdu.edu.cn/showproblem.php?pid=1023

代码:

 1 #include<stdio.h>
 2 #define maxn 100
 3 int arr[101][maxn+1]={{1},{1},{2}};
 4 //利用f(n)=f(n-1)*(4n-2)/(n+1);
 5 int main()
 6 {     
 7       int s, c=0,i,j,k;
 8     for(i=3;i<=100;i++)
 9     {
10         for(j=0;j<=maxn;j++)   //先计算乘法部分
11         {
12            arr[i][j]=arr[i-1][j]*(4*i-2)+c;
13            c=arr[i][j]/10;
14            arr[i][j]%=10;
15         }
16         s=c=0;
17         for(k=maxn;arr[i][k]==0;k--);      //计算除法部分
18         for(j=k;j>=0;j--)
19         {
20             s=arr[i][j]+10*c;
21             c=s%(i+1);
22             arr[i][j]=(s-c)/(i+1);
23         }
24     }
25 
26         int n;
27     while(scanf("%d",&n)!=EOF)
28     {
29         for(i=maxn;arr[n][i]==0;i--);
30         for(j=i;j>=0;j--)
31             printf("%d",arr[n][j]);
32            puts("");
33     }
34     return 0;
35 }
36 //后记,由于测试的时候,发现_int64/long long,都wa了,所以果断的用大数来
37 //做了...
38 //f(n)=f(n-1)*(4*n-2)/(n+1)......f(n)=c(2n,n)-c(2n,n+1)...
39 //f(n)=c(2n,n)/(n+1)...卡特兰数..很重要的...再次说明..希望不要嫌啰嗦、
40  
View Code

相关文章:

  • 2021-06-13
  • 2021-07-07
  • 2022-02-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-04
  • 2021-04-06
  • 2021-12-30
  • 2021-11-05
  • 2021-11-14
  • 2021-10-20
相关资源
相似解决方案