//高精度的Catalan数模板 公式: h ( i ) = h ( i - 1 ) * ( 4 * i - 2 ) / (i + 1)
const int MAX=100;
const int BASE=10000;
int h[101][MAX],i,j,n;
void multiply(int *h,int Max,int b) //大数乘法 求”高精度数a“乘以”低精度数b”
{
int i,array=0;
for(i=Max-1;i>=0;i--)
{
array+=b*h[i]; h[i]=array%BASE; array/=BASE;
}
}
void divide(int *h,int Max,int b) //大数除法 求”高精度数a“除以”低精度数b”
{
int i,div=0;
for(i=0;i<=Max-1;i++)
{
div=div*BASE+h[i]; h[i]=div/b; div%=b;
}
}
int main()
{
memset(h[1],0,MAX*sizeof(int));
for(i=2,h[1][MAX-1]=1;i<101;i++){
memcpy(h[i],h[i-1],MAX*sizeof(int)); //h[i] = h[i-1]
multiply(h[i],MAX,4*i-2); //h[i] * = (4 * i - 2);
divide(h[i],MAX,i+1); //h[i] / = (i + 1);
}
cin>>n;
for(i=0;i<MAX&&h[n][i]==0;i++); //去掉数组前为 0 的数字
cout<<h[n][i++]; //输出第一个非0数
for(;i<MAX;i++)printf("%d",h[n][i]);
cout<<endl;
}
高精度catalan数模板
最新推荐文章于 2020-07-11 20:49:12 发布