标签:
1 3 12 -1
1 1 2 2 3 10 3 12 416024
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;
}
}
#include <iostream>
#include <stdio.h>
using namespace std;
long long int a[40]= {1,1};
void solve()
{
for(int n=2; n<37; n++)
for(int i=0,j=n-1; i<n; i++,j--)
a[n]+=a[i]*a[j];
}
int main()
{
int n;
solve();
for(int i=1; cin>>n; i++)
{
if(n==-1)break;
printf("%d %d %lld\n",i,n,a[n]*2);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/qq_28954601/article/details/51362277