2 3 -1
2 5
//考察知识点:卡特兰数 && 大数。
/*
h(1)=1,h(0)=1;h(n)=((4*n-2)/(n+1))*h(n-1);(其中n>=2)
*/
#include<stdio.h>
#include<string.h>
#define inf 110
int a[inf][inf];
int i,j,temp,len,n;
void f()
{
temp=0;len=1;
memset(a,0,sizeof(a));
a[1][0]=1;
for(i=2;i<=100;++i)
{
for(j=0;j<len;++j)
{
a[i][j]=a[i-1][j]*(4*i-2);
}
for(j=0;j<len;++j)
{
temp+=a[i][j];
a[i][j]=temp%10;
temp/=10;
}
while(temp)
{
a[i][len++]=temp%10;
temp/=10;
}
//len--;
for(j=len-1;j>=0;--j)
{
temp=temp*10+a[i][j];
a[i][j]=temp/(i+1);
temp%=i+1;
}
while(!a[i][len-1])
len--;
}
}
int main()
{
f();
while(~scanf("%d",&n),n!=-1)
{
for(i=inf-1;i>=0&&!a[n][i];--i);
for(;i>=0;--i)
printf("%d",a[n][i]);
puts("");
}
return 0;
}
原文地址:http://blog.csdn.net/ice_alone/article/details/44517701