解题思路:
高精度求卡塔兰数模版
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <map>
#include <cmath>
#include <cstdio>
#define LL long long
using namespace std;
const int maxn = 100 + 10;
int a[maxn][maxn];
void solve()
{
a[1][0] = 1;
a[1][1] = 1;
a[2][0] = 1;
a[2][1] = 2;
int len = 1;
for(int i=3;i<=100;i++)
{
int yu = 0;
for(int j=1;j<=len;j++)
{
int t = a[i-1][j] * (4 * i - 2) + yu;
yu = t / 10;
a[i][j] = t % 10;
}
while(yu)
{
a[i][++len] = yu % 10;
yu /= 10;
}
for(int j=len;j>=1;j--)
{
int t = a[i][j] + yu * 10;
a[i][j] = t / (i + 1);
yu = t % (i + 1);
}
while(!a[i][len])
{
--len;
}
a[i][0] = len;
}
}
int main()
{
int N;
solve();
while(scanf("%d", &N)!=EOF)
{
int len = a[N][0];
for(int i=len;i>=1;i--)
{
printf("%d", a[N][i]);
}
printf("\n");
}
return 0;
}