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