#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <stack>
using namespace std;
#define N 110
int a[N][N];
//a[n][0] 用于当长度是n时的组合数
void ktl()
{
int i, j, l = 1, c, s;
a[1][0] = 1;
a[1][1] = 1;
a[2][0] = 1;
a[2][1] = 2;
for (i = 3; i < 101; i++) //预打表
{
c = 0;
for (j = 1; j <= l; j++) //(乘法)
{
s = a[i - 1][j] * (4 * i - 2) + c;//example: 11*4=10*4+1*4, c是上一位的进位
a[i][j] = s % 10;
c = s / 10;
}
while (c) //(乘法进位处理)
{
a[i][++l] = c % 10;
c /= 10;
}
for (int j = l; j > 0; j--) //(除法)
{
s = a[i][j] + c * 10; //example:99/10 9除不尽10 作余数留到下一位 使得下一位是99 可以除得尽10
a[i][j] = s / (i + 1);
c = s % (i + 1);
}
while (!a[i][l]) l--;
a[i][0] = l; //储存长度
}
}
int main()
{
ktl();
int n;
while (cin >> n)
{
for (int i = a[n][0]; i > 0; i--) cout << a[n][i];
cout << endl;
}
return 0;
}
HDOJ1023(卡特兰数+大数乘除法)
最新推荐文章于 2020-04-08 15:46:34 发布