您的位置:首页 > 大数据 > 人工智能

ACMSTEP 2.2.7 Train Problem II //高精度运算 卡特兰数(组合数学)

2011-08-13 11:59 459 查看
原题链接

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int a[105][80];    //catalan number
int b[105];         //the length of catalan

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++)    //multi
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)    //carried processing
{
a[i][len++] = carry % 10;
carry /= 10;
}
carry = 0;
for(j = len-1; j >= 0; j--) //div
{
temp = carry*10 + a[i][j];
a[i][j] = temp/(i+1);
carry = temp%(i+1);
}
while(!a[i][len-1]) 	//drop the zeros
len --;
b[i] = len;
}
}

int main()
{
int i, n;
catalan();
while(cin>>n)
{
for(i = b
-1; i>=0; i--)
{
cout<<a
[i];
}
cout<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: