标签:
1 2 3 10
1 2 5 16796HintThe result will be very large, so you may not process it by 32-bit integers.
#include<stdio.h>
#include<string.h>
const int MAXN=200;
int catalan[105][MAXN];
int temp[MAXN];
void create(){
memset(catalan,0,sizeof(catalan));
catalan[1][0] = 1;
int i,j,res;
for(i = 2; i <= 100; ++i) {
int mid = 4*i-2;
for(j = 0;j < MAXN;++j){
catalan[i][j] += catalan[i-1][j] * mid;
if(catalan[i][j]>=10){
catalan[i][j+1] += catalan[i][j]/10;
catalan[i][j] = catalan[i][j]%10;
}
}
memset(temp,0,sizeof(temp));
mid=i+1;
res=0;
for(j=MAXN-1;j>=0;--j){
temp[j] = (res*10 + catalan[i][j])/mid;
res = (10*res + catalan[i][j])%mid;
}
for(j=0; j<MAXN; ++j){
catalan[i][j] = temp[j];
}
}
}
int main(){
create();
int n;
while(~scanf("%d",&n)){
int i=MAXN-1;
while(!catalan[n][i]) --i;
for(;i>=0;--i){
printf("%d",catalan[n][i]);
}
printf("\n");
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj-1023-Train Problem II【卡特兰数】
标签:
原文地址:http://blog.csdn.net/qq_18062811/article/details/47342733