这题主要是练习大数的模拟
卡塔兰数递推公式:
a[n]=a[n-1]*(4*n-2)/(n+1);
#include<iostream>
using namespace std;
int a[101][101]={0};
int main()
{
int n,i,j,len,r,temp,t;
int b[101];
a[1][0] = 1;
len = 1;
b[1] = 1;
for(i=2;i<=100;i++)
{
t=i-1;
for(j=0;j<len;j++)
{
a[i][j]=a[i-1][j]*(4*t+2);//大数乘
}
for(j=0,r=0;j<len;j++)//进位
{
temp=a[i][j]+r;
a[i][j]=temp%10;
r=temp/10;
}
while(r)//进位
{
a[i][len++]=r%10;
r/=10;
}
for(r=0,j=len-1;j>=0;j--)//大数除
{
temp=a[i][j]+r*10;
a[i][j]=temp/(t+2);
r=temp%(t+2);
}
while(!a[i][len-1])//位数
len--;
b[i]=len;
}
while(cin>>n)
{
for(j=b[n]-1;j>=0;j--)
printf("%d",a[n][j]);
printf("\n");
}
return 0;
}