1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
void
catalan()
//求卡特兰数
{
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])
//高位零处理
len --;
b[i] = len;
}
}
|
本文转自:http://baike.baidu.com/link?url=_egc27nC6_26fYXvo6g5a98E6jFCSYvGQxjsargJWzFqqBedLeZFCjkt1y0EzvpAH7izOJNoeHenuirQ_GZw8_