自己写的一个计算大于14以上的阶乘值 但没得到想要的答案
(今天在网吧修改了一次,没有调试过的,不知道对了没)#include<stdio.h>
#define Length 2000
int a[Length];
void CatchNum(int p)//数组进位
{
int temp;//用于临时存储个位以上的数值
temp=a[p]/10;//将所得的十位以上的数值保存在temp中
a[p]=a[p]%10;//将个位数值保存在a[p]中,此时a[p]值以被修改
while(temp!=0)//判断temp里是否存有两位数以上的数,如果有放入p+1位上去
{
p++;
a[p]=temp%10;//再取改变后的temp的个位的值
temp=temp/10;//temp里是否存有两位数以上的数 有继续while 没有退出
}
}
void multi(int k)//对传入的k做乘法
{
int q=0;//用于判断有效位
int l;//用于有效位数 (分别对数组每个元素做乘法)
q=DataArray();//取得数组长度
for(l=0;l<=q;l++)//对数组每个元素做乘法
{
//int temp;
a[l]=a[l]*k;
if(a[l]>9)//判断第L次乘法是否需要进位(大于9进位)
{
CatchNum(l);//调用进位函数
}
//printf("%d",a[l]);
}
}
void print()//对数组的数据进行 输出 注:此处为逆向输出
{
int i=0,j;//判断有效位
i=DataArray();//取得有效位
for(j=i;j>=0;j--)//逆向输出
{
//printf("\n");
printf("%d",a[j]);//输出最后数据
}
}
void LoadArray()//初始话数组
{
int i;
for(i=0;i<=Length;i++)//循环当前数组所有长度
{
a[Length]=0;//组全部初始化为0
}
}
int DataArray();//判断有效位
{
int i;
int k;//保存数组长度值
for(i=Length;i>=0;i--)
{
if(a[i]!=0)
{
k=Length-i;
}
}
return k;
}
void main()
{
int i,n;
a[0]=1;
scanf("%d",&n);
LoadArray();//对数组初始化
for(i=1;i<=n;i++)//所要做的阶乘次数
{
multi(n);
}
print();//打印出数据
}
[[italic] 本帖最后由 r316999443 于 2007-12-14 21:29 编辑 [/italic]]