hdu 1134 卡特兰数+大数

来源:互联网 发布:开淘宝店应该注意什么 编辑:程序博客网 时间:2024/05/02 07:08


http://acm.hdu.edu.cn/showproblem.php?pid=1134

an =C(2n,n)/(n+1)=(4n-2)*(an-1 )/(n+1)卡特兰公式

得用大数 否则会崩

函数盗用了百度百科的

#include<iostream>#include<cstdio>int a[120][120],b[120];void catalan()//求卡特兰数b[i]存位数{    int i,j,len,carry,temp;    a[1][0]=b[1]=1;    len=1;    for(i=2;i<=100;i++)    {        for(j=0;j<len;j++)            a[i][j]=a[i-1][j]*(4*(i-1)+2);//乘法        carry=0;        for(j=0;j<len;j++)//处理相乘结果        {            temp=a[i][j]+carry;            a[i][j]=temp%10;            carry=temp/10;        }        while(carry)//进位处理        {            a[i][len++]=carry%10;            carry/=10;        }        carry=0;        for(j=len-1;j>=0;j--)//除法从被除数最高位开始除        {            temp=carry*10+a[i][j];            a[i][j]=temp/(i+1);            carry=temp%(i+1);//余下来的留着下次加        }        while(!a[i][len-1])//高位0处理            len--;        b[i]=len;    }}int main(){    catalan();    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==-1)        break;        for(int i=b[n]-1;i>=0;i--)        printf("%d",a[n][i]);        puts("");    }}


原创粉丝点击