/*
标题:<<系统设计师>>应试编程实例-[递推算法程序设计]
作者:成晓旭
时间: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、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!