catalan数高精度
#include<stdio.h>
#include<string.h>
int f[110][210];
int main()
{
int n,i,j,k,c,len1,len2,tmp[210],p,q;
memset(f,0,sizeof(f));
f[0][0]=1;
f[1][0]=1;
for(i=2;i<=101;i++)
{
for(j=1;j<i;j++)
{
memset(tmp,0,sizeof(tmp));
for(p=99;p>=0;p--)
if(f[j][p]!=0)
break;
len1=p;
for(p=99;p>=0;p--)
if(f[i-j][p]!=0)
break;
len2=p;
for(p=0;p<=len1;p++)
for(q=0;q<=len2;q++)
tmp[p+q]+=f[i-j][q]*f[j][p];
for(k=0;k<len1+len2+1;k++)
{
tmp[k+1]+=tmp[k]/10;
tmp[k]%=10;
}
for(k=0,c=0;k<210;k++)
{
int s=f[i][k]+tmp[k]+c;
c=s/10;
f[i][k]=s%10;
}
}
}
while(scanf("%d",&n)!=EOF)
{
for(i=99;i>=0;i--)
if(f[n+1][i]!=0)
break;
for(;i>=0;i--)
printf("%d",f[n+1][i]);
printf("\n");
}
return 0;
}