“大整数阶乖”问题的递推算法

王朝other·作者佚名  2007-09-14
窄屏简体版  字體: |||超大  

/*

标题:<<系统设计师>>应试编程实例-[递推算法程序设计]

作者:成晓旭

时间: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);

}

}

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航