该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
昨天复习了一下数据结构,写了个计算阶乘的程序玩玩,呵呵~!~!
#include 
#include 
#define N 10000
typedef struct node
{
    long fn;
    struct node *next;
    struct node *prior;
}NODE;
long fjiecheng(int n)    //用数组实现
{
     long fn[N]={0};
     int i,j;
     fn[0]=fn[1]=1;
     for(i=2;i<=n;i++)
     {
         for(j=1;j<=fn[0];j++)
             fn[j]*=i;
         for(j=1;j<=fn[0];j++)
            if(fn[j]>=10000)
            {  fn[j+1]+=fn[j]/10000;  fn[j]%=10000;  }
         if(fn[j]>0)
            fn[0]++;
     }
     for(i=fn[0];i>0;i--)
         printf("%04d",fn[i]);
     return fn[0];
}
long fjiecheng2(int n)    //用链表实现
{
    NODE *head,*p,*q;
    int i;
    head=(NODE *)malloc(sizeof(NODE));
    p=(NODE *)malloc(sizeof(NODE));
    head->fn=1;
    head->next=p;
    p->fn=1;
    p->next=NULL;
    for(i=2;i<=n;i++)
    {
         p=head->next;
         while(p!=NULL)
         {  p->fn*=i;  p=p->next;  }
         p=head->next;
         while(p!=NULL)
         {  if(p->fn > 10000)
            {
               if(p->next==NULL)
               {   q=(NODE *)malloc(sizeof(NODE));
                   q->fn=0;
                   q->next=NULL;
                   p->next=q;
                   head->fn++;
               }
               p->next->fn+=p->fn/10000;
               p->fn%=10000;
            }
            p=p->next;
         }
    }
    p=head->next;
    p->prior=head;
    q=p->next;
    while(q!=NULL)
    {
       q->prior=p;
       p=q;
       q=q->next;
   }
   while(p!=head)
   {
      printf("%04d",p->fn);
      p=p->prior;
   }
   return head->fn;
}
int main()
{
      int i;
      long k,j;
      printf("i=");
      scanf("%d",&i);
      printf("%d!=",i);
      k=fjiecheng(i);
      printf("\n\n\n");
      printf("%d!=",i);
      j=fjiecheng2(i);
      printf("\n%ld\n",k);
      printf("\n%ld\n",j);
      printf("\n\n");
      system("PAUSE");
      return 0;
}