当前位置: 代码迷 >> C语言 >> 自己写的一个计算大于14以上的阶乘值 但没得到想要的答案
  详细解决方案

自己写的一个计算大于14以上的阶乘值 但没得到想要的答案

热度:99   发布时间:2007-12-13 23:16:45.0
自己写的一个计算大于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]]
搜索更多相关的解决方案: temp  阶乘  int  数值  网吧  

----------------解决方案--------------------------------------------------------
有这样算阶乘 的吗. 这么复杂
----------------解决方案--------------------------------------------------------
你用其他的方法作出来,别用数组做出来我叫你大哥
----------------解决方案--------------------------------------------------------
或许我不明白你的意思..你是要计算如: 15 !  的结果.还是别的什么?
----------------解决方案--------------------------------------------------------
你可以算下50或100的阶乘  看你用的变量能不能把这些数装下来
  这就是我为什么要这么做了,如果你有好的 方法麻烦你教我下
----------------解决方案--------------------------------------------------------
  ..........

使用 64 为整数类型可以吗?

[[italic] 本帖最后由 cosdos 于 2007-12-14 21:44 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
把数字换成字符来存........不知道行不行得通
----------------解决方案--------------------------------------------------------
有点头绪了
----------------解决方案--------------------------------------------------------
一是数组初始话 要赋0 二是 取得的数组长度要后面开始取
----------------解决方案--------------------------------------------------------
用数组方法计算大阶乘可以有效防止越界问题
程序中判断用while(a[q]!='\0')
整形数组,如何出现字符串结束标志,
----------------解决方案--------------------------------------------------------
  相关解决方案