首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C语言经典算法之递堆法

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();
         }
}
返回列表