// h[n] = h[n-1] * (4n-2) / (n+1)
#include <iostream>
#define clr(x, k) memset((x), (k), sizeof(x))
#define cpy(x, k) memcpy((x), (k), sizeof(x))
#define MAX 100
#define Base 10000
using namespace std;
void multiply(int a[], int b)
{
int i, arr = 0;
for (i=MAX-1;i>=0;--i)
{
arr += b*a[i];
a[i] = arr % Base;
arr /= Base;
}
}
void divide(int a[], int b)
{
int i, div =0;
for (i=0;i<MAX;++i)
{
div = div*Base + a[i];
a[i] = div / b;
div %= b;
}
}
int main()
{
int a[111][MAX], i, n;
clr(a[1], 0);
a[1][MAX-1] = 1;
for (i=2;i<111;i++)
{
cpy(a[i], a[i-1]);
multiply(a[i], 4*i-2);
divide(a[i], i+1);
}
while (~scanf("%d", &n))
{
for (i=0;i<MAX && a[n][i]==0;++i);
cout<<a[n][i++];
for (;i<MAX;++i)
printf("%04d", a[n][i]);
cout<<endl;
}
return 0;
}
hdu 1023 大数Catalan (n>35)
最新推荐文章于 2019-06-09 11:00:31 发布