HDU 1023 Train Problem II 卡特兰数 高精度

来源:互联网 发布:java短链接实现 编辑:程序博客网 时间:2024/06/10 22:39

卡特兰数裸题,代码主要部分就是写高精度了

高精度模板:bign类C++高精度模板

这里因为位数不多所以没有压位


#include <cstdio>#include <algorithm>#include <cstring>using namespace std;struct Big{int num[10000],len;void zero(){while (num[len]==0 && len>1) len--;}Big(){memset(num,0,sizeof(num));len=0;}Big operator = (int a){memset(num,0,sizeof(num));while (a>0){num[++len]=a%10;a/=10;}zero();return *this;}Big operator + (const Big &a){Big c; c.len=max(len,a.len)+1;for (int i=1;i<=c.len;i++){c.num[i]+=num[i]+a.num[i];}for (int i=1;i<=c.len;i++){c.num[i+1]+=c.num[i]/10;c.num[i]%=10;}c.zero();return c;}Big operator * (const Big &a){Big c; c.len=len+a.len;for (int i=1;i<=len;i++){for (int j=1;j<=a.len;j++){c.num[i+j-1]+=num[i]*a.num[j];}}for (int i=1;i<=c.len;i++){c.num[i+1]+=c.num[i]/10;c.num[i]%=10;}c.zero();return c;}void Print(){for (int i=len;i>=1;i--) printf("%d",num[i]);}};int n,tt;Big cat[110];void make_cat(){cat[0]=1; cat[1]=1;for (int i=2;i<=100;i++){Big sum;for (int j=0;j<i;j++){int k=i-j-1;sum=sum+cat[j]*cat[k];}cat[i]=sum;}}int main(){make_cat();while (scanf("%d",&n)!=-1){cat[n].Print(); printf("\n");}return 0;}


0 0
原创粉丝点击