原题:http://acm.hdu.edu.cn/showproblem.php?pid=1134
跟HOJ的1023和1130几乎一模一样,只是循环读取数据的条件不同。
附:HOJ_1023 Train Problem II,HOJ_1130 How Many Trees? 卡特兰数+大数乘除
本题代码:
//1134
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=2000;
void ds_cheng(int s[],int maxn,int m)//大数乘法
{
int c=0;//进位
int k;
for(k=maxn-1;k>=0;k--)
{
int x=m*s[k]+c;
s[k]=x%10;
c=x/10;
}
}
void ds_chu(int s[],int maxn,int m)//大数除法
{
int t=0;//退位,余数
int k;
for (k=0;k<=maxn-1;k++)
{
int x=t*10+s[k];
s[k]=x/m;
t=x%m;
}
}
int main()
{
int n;
while(scanf("%d",&n)&&n!=-1)
{
int s[maxn]={0};
//memset(s,0,sizeof(s));
s[maxn-1]=1;
int i,j;
for (i=n+1;i<=2*n;i++)
{
ds_cheng(s,maxn,i);
}
for (i=1;i<=n;i++)
{
ds_chu(s,maxn,i);
}
ds_chu(s,maxn,n+1);
for (j=0;j<=maxn-1;j++)
if(s[j]!=0)
break;
for (i=j;i<=maxn-1;i++)
printf("%d",s[i]);
cout<<endl;
}
return 0;
}