卡特兰数的应用,只是乘多一项 N!
下面的是AC的代码:
#include <iostream>
#include <cstring>
using namespace std;
int data[102][100] = {0};
void deal()
{
int i, j, k = 0;
int temp[500];
data[0][0] = 0;
data[1][0] = 1;
data[2][0] = 2;
for(i = 3; i < 102; i++)
{
for(j = 0; j < 100; j++)
{
k += data[i - 1][j] * (4 * i - 2);
temp[j] = k % 10;
k /= 10;
}
for(j = 99; j >= 0; j--)
if(temp[j])
break;
int div = 0;
while(j >= 0)
{
div = div * 10 + temp[j];
temp[j] = div / (i + 1);
div %= (i + 1);
j--;
}
for(j = 0; j < 100; j++)
data[i][j] = temp[j];
}
}
int main()
{
deal();
int n;
while(cin >> n && n)
{
int j, k;
int ans[500];
memset(ans, 0, sizeof(ans));
for(j = 0; j < 100; j++)
ans[j] = data[n][j];
for(int i = 2; i <= n; i++)
{
k = 0;
for(j = 0; j < 500; j++)
{
k += ans[j] * i;
ans[j] = k % 10;
k /= 10;
}
}
for(j = 499; j >= 0; j--)
if(ans[j])
break;
while(j >= 0)
cout << ans[j--];
cout << endl;
}
return 0;
}