标题:自己写的一个计算大于14以上的阶乘值 但没得到想要的答案
只看楼主
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
结帖率:80%
 问题点数:0 回复次数:14 
自己写的一个计算大于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 数值 网吧 
2007-12-13 23:16
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
得分:0 
有这样算阶乘 的吗. 这么复杂
2007-12-13 23:27
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
得分:0 
你用其他的方法作出来,别用数组做出来我叫你大哥
2007-12-13 23:30
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
得分:0 
或许我不明白你的意思..你是要计算如: 15 !  的结果.还是别的什么?
2007-12-13 23:46
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
得分:0 
你可以算下50或100的阶乘  看你用的变量能不能把这些数装下来
  这就是我为什么要这么做了,如果你有好的 方法麻烦你教我下
2007-12-13 23:50
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
  ..........

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

[[italic] 本帖最后由 cosdos 于 2007-12-14 21:44 编辑 [/italic]]

—>〉Sun〈<—
2007-12-14 00:35
mndren
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2007-11-17
得分:0 
把数字换成字符来存........不知道行不行得通
2007-12-14 02:27
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
得分:0 
有点头绪了
2007-12-14 10:47
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
得分:0 
一是数组初始话 要赋0 二是 取得的数组长度要后面开始取
2007-12-14 11:02
jxj777
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2007-10-27
得分:0 
用数组方法计算大阶乘可以有效防止越界问题
程序中判断用while(a[q]!='\0')
整形数组,如何出现字符串结束标志,

一个人的力量是缈小的....... 互帮互助才是出路
2007-12-14 11:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-192355-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.083067 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved