Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看800次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: “大整数阶乖”问题的递推算法
张小峰
超级版主
UID: 14
来自:
精华: 4
积分: 313
帖子: 285
注册: 2007-8-23 10:27:00
状态: 离线
威望: 8.00
金钱: 75.55 元
只看楼主 2007-09-18 15:18
“大整数阶乖”问题的递推算法
/*
标题:<<系统设计师>>应试编程实例-[递推算法程序设计]
作者:成晓旭
时间: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<k;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);
}
}
//:============================“大整数阶乖”问题的递推算法===========================
#1  
发表新主题 回复该主题
本主题被查看800次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-10-07 12:17:48

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0 seconds