流浪家园

上帝给我们十字架,同时也给我们背负十字架的勇气和力量!

n(n<100)的阶乘

/************************************************************************/
/*    求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;
}

阅读更多
文章标签: input
个人分类: C/C++
想对作者说点什么? 我来说一句

c++递归c++递归c++递归

2011年08月19日 889KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭