Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18671425
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-27 21:11:31

/*
 标题:<<系统设计师>>应试编程实例-[递推算法程序设计]
 作者:成晓旭
 时间:2002年09月11日(11:52:00-16:26:00)
    实现递推算法的大整数阶乖处理函数
 时间:2002年09月16日(18:38:00-20:02:00)
    实现“斐波那契数列”问题的递推算法函数
*/

//:============================“大整数阶乖”问题的递推算法===========================
#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("%4d!=",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);
 }
}
//:============================“大整数阶乖”问题的递推算法=========================== 

阅读(302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~