| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2388 人关注过本帖
标题:自己写的一个计算大于14以上的阶乘值 但没得到想要的答案
取消只看楼主 加入收藏
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
结帖率:80%
收藏
 问题点数:0 回复次数:6 
自己写的一个计算大于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
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
收藏
得分:0 
你用其他的方法作出来,别用数组做出来我叫你大哥
2007-12-13 23:30
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
收藏
得分:0 
你可以算下50或100的阶乘  看你用的变量能不能把这些数装下来
  这就是我为什么要这么做了,如果你有好的 方法麻烦你教我下
2007-12-13 23:50
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
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
收藏
得分:0 
原帖由 [bold][underline]jxj777[/underline][/bold] 于 2007-12-14 11:22 发表 [url=http://bbs.][/url]
用数组方法计算大阶乘可以有效防止越界问题
程序中判断用while(a[q]!='\0')
整形数组,如何出现字符串结束标志,



我已经改了
将前面的2000位全初始为0   在判断数值的位数 是从最后1位判断起 若遇到不为0的数  就计算出他的
数据长度
现在还在修改中  星期天将答案发上来
供大家参考
2007-12-14 21:06
r316999443
Rank: 7Rank: 7Rank: 7
来 自:星城长沙
等 级:黑侠
威 望:1
帖 子:597
专家分:501
注 册:2006-11-7
收藏
得分:0 
回复 14# 的帖子
我需要的是能算出50 100 或 更高的阶乘  不过14#好厉害 不用数组也算到20了
2007-12-16 22:18
快速回复:自己写的一个计算大于14以上的阶乘值 但没得到想要的答案
数据加载中...
 
   



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

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