方法
利用卡特兰数计算公式:C(n,m)=C(n-1,m-1)+C(n-1,m)
高精可加可不加(仅本题)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+1e2;
ll f[N][N];//Catalan数
void Catalan()
{
f[1][0]=1;//f[i][0]为位数
f[1][1]=1;
f[2][0]=1;
f[2][1]=2;
//公式C(n,m)=C(n-1,m-1)+C(n-1,m)
ll len=1;
for(ll i=3;i<=100;i++)
{
ll r=0;//进位
for(ll j=1;j<=len;j++)//大数乘法
{
ll t=(f[i-1][j]*(4*i-2))+r;
r=t/10;
f[i][j]=t%10;
}
while(r)
{
f[i][++len]=r%10;
r/=10;
}
ll yu=0;//余数
for(int j=len;j>=1;j--)//大数除法
{
int t=f[i][j]+yu*10;
f[i][j]=t/(i+1);
yu=t%(i+1);
}
while(!f[i][len])
{
len--;
//去掉前导0
}
f[i][0]=len;
}
}
signed main()
{
ll n;
Catalan();
cin>>n;
ll len=f[n][0];
for(ll i=len;i>=1;i--)cout<<f[n][i];
return 0;
}