您的位置:首页 > 大数据

hdoj1023 Train Problem II(卡特兰数,对大数据的处理)

2017-05-23 20:50 357 查看
由火车序列这个实际问题引出卡特兰数问题。

c(0)=1;(n+2)*c(n+1)=c(n)*(4n+2)

这题是在理解别人代码的基础上,自己又重新敲了一遍,按照自己的理解注释了些地方。

//c(0)=1;(n+2)*c(n+1)=c(n)*(4n+2)
#include<iostream>
using namespace std;
int main()
{
int i,j,len,r,temp,k,n;
int a[101][101]={0};
int flag[101];flag[1]=1;
a[1][0]=1;len=1;
for(i=2;i<=100;i++)
{
k=i-1;
for(j=0;j<len;j++)
a[i][j]=a[i-1][j]*(4*k+2);//各位分别相乘 (4n+2)
for(j=r=0;j<len;j++) //把除最高位以外的值都变为个位数
{
temp=r+a[i][j];
a[i][j]=temp%10;
r=temp/10;
}
while(r)//将最高位上的数像之前那样拆分为个位数存储在各个位置
{
a[i][len++]=r%10;
r=r/10;
}
for(r=0,j=len-1;j>=0;j--)//除以(n+2)
{
temp=r*10+a[i][j];
a[i][j]=temp/(k+2);
r=temp%(k+2);
}
j=len-1;
while(!a[i][j])//去零
{
len--;j--;
}
flag[i]=len;
}
while(cin>>n)
{
for(i=flag
-1;i>=0;i--)
cout<<a
[i];
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: