n(n

/************************************************************************/
/*    求n(n<100)的階乘                                                  */
/*    用數組a存放結果其中數組的每一位存放一位數,a[0]存放當前結果的位數  */
/************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 1000
/*已知 (n-1)!在數組a中, 求k! -------把(n-1)!再加上n-1次 */
void Factorial(int *a ,int n)
{
 int* b;
 int i,j,r;
 int m=a[0];
 int carry=0;

 b=(int*)malloc(sizeof(int)*(m+1));
        if(!b)
 {
  printf("malloc memory Error!/n");
  exit(0);
 }
 for(i=1; i<=m; i++)
 {
  b[i]=a[i];
 }

 for(j=1; j<n; j++)
 {
  for(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;
  }
  carry=0;
 }
 free(b);
 a[0]=m;
}

/*輸出結果 */
void PrintResult(int *a, int n)
{
 int i;
 printf("%4d!=",n);
 for(i=a[0]; i>0; i-- )
 {
  printf("%d",a[i]);
 }
 printf("/n");
}

int main()
{
 int a[MAX];
 int n,k;
 printf("please input the number: /n");
 scanf("%d",&n);
 
 a[0]=1;
 a[1]=1;
        PrintResult(a,1);

 for(k=2; k<=n; k++)
 {
  Factorial(a,k);
  PrintResult(a,k);
 }
 getch();
        return 0;
}

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章