HDU-1133 Buy the Ticket (Catalan数)

来源:互联网 发布:mac日历添加美国节日 编辑:程序博客网 时间:2024/05/22 15:09

公式:(m+n)!*(m-n+1)/(m+1)

简单的大数运算。看似有除法,可以约去,大数相乘就行了。

#include<iostream>#include<cstdio>#include<cstring>using namespace std ;int len;int M[305];void Mult(int *a,int k){int Curlen=0,tmp;int carry=0;for(int i=0;i<len;i++){tmp=a[i]*k+carry;a[Curlen++]=tmp%10000; //先前进制少了,存不下。 carry=tmp/10000;}if(carry) a[Curlen++]=carry;    len=Curlen;}int main(){int n,m,T=1;    while(scanf("%d %d",&m,&n),(n||m)){if(n>m){printf("Test #%d:\n0\n",T++);continue;}memset(M,0,sizeof(M));M[0]=1,len=1;for(int i=m+n;i>1;i--){if(i==m+1) continue;Mult(M,i);}if(n) Mult(M,m-n+1);printf("Test #%d:\n",T++);printf("%d",M[len-1]);for(int i=len-2;i>=0;i--) printf("%04d",M[i]);puts("");    } return 0 ;}



0 0
原创粉丝点击