catalan数的简单应用: h(n) = ((4 * n - 2) * h(n - 1) / (n + 1)
#include <iostream>
using namespace std;
struct node {
int data[200];
int len;
};
int n;
node ans[101];
void print_ans(int pos) {
for (int i = ans[pos].len - 1; i >= 0; --i) {
printf("%d", ans[pos].data[i]);
}
printf("/n");
}
void get_ans() {
int i, j;
int up;
ans[1].data[0] = 1;
ans[1].len = 1;
for (i = 2; i <= 100; ++i) {
for (j = 0; j < ans[i - 1].len; ++j) {
ans[i].data[j] = ans[i - 1].data[j] * (4 * i - 2);
}
ans[i].len = ans[i - 1].len;
for (j = up = 0; j < ans[i].len; ++j) {
up += ans[i].data[j];
ans[i].data[j] = up % 10;
up /= 10;
}
while (up) {
ans[i].data[ans[i].len] = up % 10;
up /= 10;
ans[i].len++;
}
for (j = ans[i].len - 1, up = 0; j >= 0; --j) {
up *= 10;
up += ans[i].data[j];
ans[i].data[j] = up / (i + 1);
up %= (i + 1);
}
while (ans[i].data[ans[i].len - 1] == 0) {
ans[i].len--;
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
get_ans();
while (scanf("%d", &n) != EOF) {
print_ans(n);
}
return 0;
}