就业数据资源平台
当前位置:首页 > C++语言程序设计
2012年计算机等级二级C++辅导实例编程(9)

大整数阶乘问题的递推算法

  //:===========“大整数阶乘”问题的递推算法===========


  #define  MAXN 1000  //最大数据位数


  //用递推法求取整数k的阶乖,将结果放入数组array中


  void pnext(int array[],int k)


  {


  int *temp; //动态数组[临时存储运算大整数]


  int i,j,num_len = array[0],carry,t; //循环变量,长整数位数,进位标志,临时变量


  if(array[0] >= MAXN)


  {


  printf("数据处理位数超过程序设计上限,程序将自动中断运行!\n");


  exit(1);


  }


  temp = (int *)malloc(sizeof(int) * (num_len + 1)); //创建动态数组


  for(i=1;i<=num_len;i++)


  temp[i] = array[i];  //保存原始数据


  for(j=1;j  {


  for(carry = 0,i=1;i<=num_len;i++)


  {


  if(i <= array[0])


  t = array[i] + temp[i] + carry;


  else


  t = array[i] + carry; //处理最高位


  //数据位调整


  array[i] = t % 10;


  carry = t / 10;


  }


  if(carry)


  array[++num_len] = carry; //在最高位记录进位标志


  }


  free(temp);


  array[0] = num_len;


  }


  //显示阶乖结果


  void Show_Result(int array[],int base_number)


  {


  int i;


  printf("M!=",base_number);


  for(i=array[0];i>0;i--)


  printf("%d",array[i]);


  printf("\n\n");


  }


  //计算数据的阶乘


  void Count_Result(int array[], int base_number)


  {


  int k;


  array[0] = 1;


  array[1] = 1;


  for(k=2;k<=base_number;k++)


  {


  pnext(array,k);


  Show_Result(array,k);


  }


  }


  //:==========“大整数阶乘”问题的递推算法=========

就业数据资源平台