做过很多这种题型了
无非就是嵌套公式a[i] = a[i-1]*(4*i-2)/(i+1)
网上有一个总结,写的还不错,自己之前也总结过类似的。
附上地址:
点击打开链接
解决的也是这个问题:出栈种类个数,还用到了大数
代码:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<stack>
using namespace std;
#define MAX 101
#define base 10000
#define ll long long
void mul(int a[],int len,int b)
{
int carry = 0,i;
for(i = len-1;i>=0;i-- )
{
carry +=b*a[i];
a[i] = carry%base;
carry /= base ;
}
}
void div(int a[],int len, int b )
{
int div= 0,i;
for(int i = 0 ; i<= len-1 ; i ++)
{
div = div*base +a[i];
a[i] = div/b;
div = div%b;
}
}
int a[MAX][MAX];
int main(){
int n ,i;
memset(a[1],0,sizeof(a[1]));
a[1][MAX-1]=1 ;
for(i = 2 ; i <=100 ; i ++)
{
memcpy(a[i],a[i-1],MAX*sizeof(int));
mul(a[i],MAX,4*i-2);
div(a[i],MAX,i+1);
}
while(~scanf("%d",&n))
{
for(i = 0 ; i < MAX ;i ++)
{
if(a[n][i]!=0)
break ;
}
printf("%d",a[n][i]);
i++ ;
for( ; i <MAX ; i ++)
{
printf("%04d",a[n][i]);
}
printf("\n");
}
}