卡特兰数
C(n) = 1 /(n-1)*C(2*n,n)
递推公式为
C(n)=(4*n - 2)/( n - 1 ) *C(n-1) 若用递推公式,会在32的时候溢出
下面的代码用的是dp的思想
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
long long c[50][50];
int main()
{
int cases=1;
for(int i=0;i<=35;i++)
c[0][i]=1;
for(int i=1;i<=35;i++){
for(int j=i;j<=35;j++){
if(i==j)
c[i][j]=c[i-1][j];
else
c[i][j]=c[i-1][j]+c[i][j-1];///定点数值等于对角线两数之和
}
}
int n;
freopen("in.txt","r",stdin);
while(scanf("%d",&n),n>0)
printf("%d %d %lld\n",cases++,n,2*c[n][n]);
return 0;
}
import java.math.BigInteger;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int times,j,l;
BigInteger []k=new BigInteger[107];
k[0]=BigInteger.valueOf(1);
for(j=1;j<=100;j++)
{
k[j]=BigInteger.valueOf(0);
for (l=0;l<=j-1;l++)
{
k[j]=k[j].add(k[l].multiply(k[j-1-l]));
}
}
while (cin.hasNext())
{
times=cin.nextInt();
if(times!=-1)
System.out.println(k[times]);
else
break;
}
}
}