自己写的一个计算大于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]]
----------------解决方案--------------------------------------------------------
有这样算阶乘 的吗. 这么复杂
----------------解决方案--------------------------------------------------------
你用其他的方法作出来,别用数组做出来我叫你大哥
----------------解决方案--------------------------------------------------------
或许我不明白你的意思..你是要计算如: 15 ! 的结果.还是别的什么?
----------------解决方案--------------------------------------------------------
你可以算下50或100的阶乘 看你用的变量能不能把这些数装下来
这就是我为什么要这么做了,如果你有好的 方法麻烦你教我下
----------------解决方案--------------------------------------------------------
..........
使用 64 为整数类型可以吗?
[[italic] 本帖最后由 cosdos 于 2007-12-14 21:44 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
把数字换成字符来存........不知道行不行得通
----------------解决方案--------------------------------------------------------
有点头绪了
----------------解决方案--------------------------------------------------------
一是数组初始话 要赋0 二是 取得的数组长度要后面开始取
----------------解决方案--------------------------------------------------------
用数组方法计算大阶乘可以有效防止越界问题
程序中判断用while(a[q]!='\0')
整形数组,如何出现字符串结束标志,
----------------解决方案--------------------------------------------------------