Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

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

高精度

卡塔兰数

我的代码
 1 //HDU 1134
2
3 #include <stdio.h>
4 const int base=10000000;
5 int a[100];
6 void mult(int *a,int b)
7 {
8 int i;
9 a[1]*=b;
10 for (i=2;i<=a[0];i++)
11 {
12 a[i]=a[i]*b+a[i-1]/base;
13 a[i-1]%=base;
14 }
15 while (a[a[0]]>=base)
16 {
17 a[0]++;
18 a[a[0]]=a[a[0]-1]/base;
19 a[a[0]-1]%=base;
20 }
21 }
22 void divi(int *a,int b)
23 {
24 int t=0,i;
25 for (i=a[0];i>0;i--)
26 {
27 t=t*base+a[i];
28 a[i]=t/b;
29 t%=b;
30 }
31 while (a[a[0]]==0) a[0]--;
32 }
33 void printbn(int *a)
34 {
35 int i;
36 printf("%d",a[a[0]]);
37 for (i=a[0]-1;i>0;i--) printf("%07d",a[i]);
38 printf("\n");
39 }
40 int main()
41 {
42 int n,i;
43 while (scanf("%d",&n) && (n!=-1))
44 {
45 a[0]=a[1]=1;
46 for (i=n+2;i<=2*n;i++) mult(a,i);
47 for (i=1;i<=n;i++) divi(a,i);
48 printbn(a);
49 }
50 return 0;
51 }

 

posted on 2011-12-03 15:44  Qiuqiqiu  阅读(219)  评论(0编辑  收藏  举报