计算机二级:大整数阶乘问题的递推算法计算机二级考试
文章作者 100test 发表时间 2009:05:08 18:17:33
来源 100Test.Com百考试题网
2009年下半年全国计算机等级考试你准备好了没?考计算机等级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库
/*
标题:<.<.系统设计师>.>.应试编程实例-[递推算法程序设计]
实现递推算法的大整数阶乘处理函数
时间: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("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).
}
}
//:==========“大整数阶乘”问题的递推算法=========
特别推荐:
2009年9月全国计算机等级考试时间及科目预告