catalan数高精度
公式:c(n+1)=2*(2*n+1)*c(n)/(n+2)
高精度除法从高位开始模拟现实除法步骤求得商
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxN=110;
const int maxM=1010;
int a[maxN][maxM];
int tmp[maxM];
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
a[0][0]=1;
for(int i=0;i<maxN;++i){
int k=2*(2*i+1);
for(int j=0,c=0;j<maxM;++j){
int s=a[i][j]*k+c;
c=s/10;
a[i+1][j]=s%10;
}
k=maxM;
int cnt=0;
while(!a[i+1][--k]);
for(int s=0;k>=0;--k){
s=10*s+a[i+1][k];
tmp[cnt++]=s/(i+2);
s%=(i+2);
}
for(int j=0;j<maxM;++j){
if(j<cnt)
a[i+1][j]=tmp[cnt-j-1];
else
a[i+1][j]=0;
}
}
int n;
while(cin>>n,n!=-1){
int i=maxM;
while(!a[n][--i]);
for(;i>=0;i--)
cout<<a[n][i];
cout<<endl;
}
return 0;
}