Board logo

标题: C语言经典算法之递堆法 [打印本页]

作者: 苹果也疯狂    时间: 2014-5-13 16:46     标题: C语言经典算法之递堆法

/*** P402 ***/
#include <stdio.h>
#include <malloc.h>
#define MAXN 1000
void pnext(int a[],int k)
{
         int*b,m=a[0],i,j,r,carry;
         b=(int*)malloc(sizeof(int)*(m+1));
         for(i=1;i<=m;i++)
                   b[i]=a[i];
         for(j=1;j<k;j++)
         {
                   for(carry=0,i=1;i<=m;i++)
                   {
                            r=(i<=a[0]?a[i]+b[i]:a[i])+carry;
                            a[i]=r%10;
                            carry=r/10;
                   }
                   if(carry)
                            a[++m]=carry;
         }
         free(b);
         a[0]=m;
}
void write(int *a,int k)
{
         inti;
         printf("%4d!=",k);
         for(i=a[0];i>0;i--)
                   printf("%d",a[i]);
         printf("\n\n");
}
void main()
{
         inta[MAXN],n,k;
         printf("Enterthe number n:  ");
         scanf("%d",&n);
         a[0]=1;
         a[1]=1;
         write(a,1);
         for(k=2;k<=n;k++)
         {
                   pnext(a,k);
                   write(a,k);
                   getchar();
         }
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0