//60位的大数与不超过100的数的乘法与除法
// A(n+1)=c(2n,n)/n+1,Catalan数
//递推关系是A(n) = 4n-2/n+1 A(n+1),n<=100
int r[60];
for(i=1;i<60;++i) //数组存放结果
r[i]=0;
r[0]=j=1;
for(i=2;i{
for(k=0;i<=n;++i)
r[k]*=(4*i-2);//大数乘法,从低位到高位
for(k=c=0;k {
t=r[k]+c;
r[k]=t%10;
c=t/10; //对乘法结果处理进位
}
while(c)
{
r[j]=c%10;
c/10;
++j; //乘法最高进位
}
for(k=j-1,c=0;k>=0;--k) //大数除法,从高位到低位
{
t=c*10+r[k];
r[k]=t/(i+1);
c=t%(i+1);
}
while(!r[j-1]) //除法最高位
--j;
}
阅读(1532) | 评论(0) | 转发(0) |