题目是说给出一个数字,然后以1到这个数为序号当做二叉树的结点,问总共有几种组成二叉树的方式。这个题就是用卡特兰数算出个数,然后因为有编号,不同的编号对应不同的方式,所以结果是卡特兰数乘这个数的阶乘种方案。因为数字比较大,所以要用高精度的方法也就是用字符数组来做,我分别写了三个函数,一个算加法,一个算乘法,最后一个打表,等打出表来最后只要判断一下输入的数是第几个,直接输出就行了,下面是我的代码,第一次写高精度的这种大数处理,可能看上去比较繁琐= =

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char ans[][];
char ads[],mus[];
char jc[][];
char res[][]; int multiply(char* a1,char* b1)
{
memset(mus,,sizeof(mus));
int i,j,k;
int len,len1,len2;
len1=strlen(a1);
len2=strlen(b1);
int mut=,t;
bool va[];
int s[],adt[];
char a[],b[];
memset(s,,sizeof(s));
memset(adt,,sizeof(adt));
memset(va,,sizeof(va));
for(i=len1-,j=;i>=;i--)
{
a[i]=a1[j];
j++;
}
for(i=len2-,j=;i>=;i--)
{
b[i]=b1[j];
j++;
}
for(i=;i<len1;i++)
{
mut=;
for(j=;j<len2;j++)
{
t=(a[i]-'')*(b[j]-'')+mut;
mut=;
if(t>=)
{
mut=t/;
t=t%;
}
s[i+j]=t+s[i+j]+adt[i+j];
va[i+j]=;
adt[i+j]=;
if(s[i+j]>=)
{
if(!va[i+j+])
adt[i+j+]=s[i+j]/+adt[i+j+];
else
adt[i+j+]=s[i+j]/;
s[i+j]=s[i+j]%;
}
}
s[i+j]=mut;
}
s[i+j-]=mut+adt[i+j-];
if(s[i+j-]!=)
k=i+j-;
else
k=i+j-;
for(i=k,j=;i>=;i--)
{
mus[i]=(s[j]+'');
j++;
}
return ;
} int additive(char* a,char* b)
{
memset(ads,,sizeof(ads));
int len,len1,len2;
int i;
int ad[];
len1=strlen(a);
len2=strlen(b);
if(len1==len2)
{
len=len1;
}
else if(len1>len2)
{
len=len1;
for(i=len;i>=len-len2;i--)
{
b[i]=b[i-len+len2];
}
for(i=len-len2-;i>=;i--)
{
b[i]='';
}
}
else if(len1<len2)
{
len=len2;
for(i=len;i>=len-len1;i--)
{
a[i]=a[i-len+len1];
}
for(i=len-len1-;i>=;i--)
{
a[i]='';
}
}
int t=;
for(i=len-;i>=;i--)
{
ad[i]=(a[i]-'')+(b[i]-'')+t;
t=;
if(ad[i]>=)
{
t++;
ad[i]=ad[i]-;
ads[i]=ad[i]+'';
}
else
{
ads[i]=ad[i]+'';
}
}
if(t==)
{
for(i=len;i>=;i--)
{
ads[i]=ads[i-];
}
ads[]='';
}
return ;
} int excel()
{
ans[][]='';
ans[][]='';
char sum[];
int n;
int i,j;
char t[];
memset(sum,,sizeof(sum));
for(i=;i<=;i++)
{
for(j=i;j>;j--)
{
multiply(ans[i-j],ans[j-]);
additive(mus,sum);
strcpy(sum,ads);
}
strcpy(ans[i],sum);
memset(sum,,sizeof(sum));
}
jc[][]='';
for(i=;i<;i++)
{
memset(t,,sizeof(t));
if(i>=)
{
t[]=i/+'';
t[]=i%+'';
}
else
{
t[]=i+'';
}
multiply(jc[i-],t);
strcpy(jc[i],mus);
}
multiply(jc[],"");
strcpy(jc[],mus);
for(i=;i<=;i++)
{
multiply(ans[i],jc[i]);
strcpy(res[i],mus);
//cout<<"res["<<i<<"]="<<res[i]<<endl;
}
return ;
} int main()
{
int n;
excel();
while(scanf("%d",&n)!=EOF)
{
if(n==)
break;
cout<<res[n]<<endl;
}
return ;
}

HDU 1131 Count the Trees 大数计算的更多相关文章

  1. Uva 10007 / HDU 1131 - Count the Trees (卡特兰数)

     Count the Trees  Another common social inability is known as ACM (Abnormally Compulsive Meditation) ...

  2. HDU 1131 Count the Trees

    卡特兰数再乘上n的阶乘 #include<iostream> #include<cstdio> using namespace std; #define base 10000 ...

  3. hdu 1130,hdu 1131(卡特兰数,大数)

    How Many Trees? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. zjuoj 3602 Count the Trees

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3602 Count the Trees Time Limit: 2 Seco ...

  5. Count the Trees[HDU1131]

    Count the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. hdu 1023 卡特兰数《 大数》java

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. js 大数计算

    js 大数计算 原理 JavaScript 安全整数 是 -253-1 ~ 253-1 ,即: -9007199254740991 ~ 9007199254740991; 换句话说,整数超过这个范围就 ...

  8. HDU 4588 Count The Carries 计算二进制进位总数

    点击打开链接 Count The Carries Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java ...

  9. HDU 1042 大数计算

    这道题一开始就采用将一万个解的表打好的话,虽然时间效率比较高,但是内存占用太大,就MLE 这里写好大数后,每次输入一个n,然后再老老实实一个个求阶层就好 java代码: /** * @(#)Main. ...

随机推荐

  1. 搭建LNAMP环境(四)- 源码安装PHP7

    上一篇:搭建LNAMP环境(三)- 源码安装Apache2.4 一.安装PHP7 1.yum安装编译php需要的包 yum -y install libxml2 libxml2-devel curl- ...

  2. html5视频全频播放

    html5视频全频播放 旋转90度 对video进行缩放 修正position 效果还凑合 代码 $(media).rotate({ // angle: 90, duration: 100, anim ...

  3. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

  4. 快速入门系列--WCF--04元数据和异常处理

    本章节将进行元数据和异常处理的介绍,这部分内容概念型比较强,可以快速浏览一下就好. 客户端和服务器借助于终结点进行通信,服务的提供者通过一个或者多个终结点将服务发布出来,服务的消费者则通过创建与之匹配 ...

  5. 做网站用UTF-8编码还是GB2312编码?

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. 经常我们打开外国网站的时 ...

  6. hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)

    /* 题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! tm太坑了... 1,如果这个无向图开始就是一个非连通图,直接输出0 2,重边(两个节点存在多条边, 权值不一样) 3,如果找到 ...

  7. Uvaoj 10048 - Audiophobia(Floyd算法变形)

    1 /* 题目大意: 从一个点到达另一个点有多条路径,求这多条路经中最大噪音值的最小值! . 思路:最多有100个点,然后又是多次查询,想都不用想,Floyd算法走起! */ #include< ...

  8. 后端码农谈前端(CSS篇)第五课:CSS样式

    一.背景: CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果. 1.背景色 可以使用 background-color 属性为元素设置背景色.这个属性接受任何合法的颜色值. 例如: ...

  9. 如何在windows 10 x64安装佳能 CP900 驱动

    佳能太无耻,为了销售CP910 , CP900 到win8 ,win8.1,win 10 都没有驱动程序,网上找的方法都不行,IT民工自有办法: 1.按住shift键,重启电脑 restart 2.在 ...

  10. PhotoShop常用快捷键

    Photoshop常用快捷键: 图01 图02 图03 图04 图05 快捷键 PS快捷键是Photoshop为了提高绘图速度定义的快捷方式,它用一个或几个简单的字母来代替常用的命令. 多种工具共用一 ...