finished 1023 Catalan number

/*问题大意是用S表示入栈，X表示出栈，那么合法的序列有多少个(S的个数为n)
显然有c(2n, n)个含S，X各n个的序列，剩下的是计算不允许的序列数(它包含正确个数的S和X，但是违背其它条件)。

在任何不允许的序列中，定出使得X的个数超过S的个数的第一个X的位置。然后在导致并包括这个X的部分序列中，以S代替所有的X并以X代表所有的S。结果是一个有(n+1)个S和(n-1)个X的序列。反过来，对一垢一种类型的每个序列，我们都能逆转这个过程，而且找出导致它的前一种类型的不允许序列。例如XXSXSSSXXSSS必然来自SSXSXXXXXSSS。这个对应说明，不允许的序列的个数是c(2n,
n-1)，因此an = c(2n, n) - c(2n, n-1)。
*/
//Catalan数的组合公式为 Cn=C(2n,n) / (n+1);
//递推公式为 h(n ) = h(n-1)*(4*n-2) / (n+1);

//乘法
for(j=0;j<len;j++){//遍历前面每位*公式==得到结果的每位
data[i][j] = data[i-1][j] * (4*i-2);
}
//处理进位
jin = 0;temp=0;
for(j=0;j<len;j++){
temp = data[i][j]+jin;
data[i][j] = temp%10;
jin = temp/10;
}
//处理最后的进位--注意可能进位会是个大数
while(jin){
data[i][len++] = jin%10;
jin /= 10;
}
//除法
jin = 0;temp = 0;
for(j=len-1;j>=0;j--){
temp = jin*10 + data[i][j];//从高位开始输出
data[i][j] = temp/(i+1);
jin = temp % (i+1);
}
while(!data[i][len-1]) //高位零处理
len --;
datalen[i] = len;