| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2920 人关注过本帖
标题:1000的阶乘?
只看楼主 加入收藏
yuucyf
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-15
收藏
 问题点数:0 回复次数:18 
1000的阶乘?
因为结果产生的数超过的系统定义的长度,所以要变通!!! 我用一个大数组(如数组a[1000])的各个元素来表示结果的一位数,其中a[0]存放当前的结果的位数!!!比如:结果为123456......,(一共70位),那么a[0]=70,a[70]=1, a[69]=2,a[68]=3,a[67]=4......!!!!! 但是我的程序有点问题,哪位帮帮看一下,看那里出现问题!!! (可以用比较小的数试试),我对程序从头用多个实例走了好多遍,都没有问题,但是运行起来就有问题!!!实在找不出!!!! 希望大家帮忙!!谢谢了!!! 代码: #include<iostream> #include<stdlib.h> using namespace std ; int main() { int a[1000]={0} ; //先定义足够大的数组容纳1000阶剩的数 a[0]=a[1]=1 ; //a[0]为当前的位数 int m=0 , t, n , b=0 , l ; //m为低位向高位的进位 for(int j=2 ; j<=1000 ; j++) { n=a[0] ; for(int i=1 ; i<=n ; i++) { a[i] = a[i] * j + m ; if(a[i] > 9) { t = a[i] / 10 ; a[i] = a[i] % 10 ; m = t ; if(i = a[0]) //当到最高位时,则要进行相应的处理! { l = i ; while(m > 9) { l++ ; t = m / 10 ; a[l] = m % 10 ; m = t ; a[0]++ ; } if(m > 0) { l++; a[l] = m ; a[0]++ ; m = 0 ; } } } else m = 0 ; } } cout << "1000的阶乘结果一共需要" << a[0] << "位" << endl ; for(int i=999 ; i>=1 ; i--) //因为1000的阶乘没有1000位,那么前面的都是零,所以就从不为零处输出 { if(a[i] != 0 && b==0) { for(int j=i ; j>=1 ; j--) cout << a[i] ; b = 1 ; } } system("pause") ; }
搜索更多相关主题的帖子: 阶乘 定义 系统 
2005-10-26 22:54
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
如果我没有记错的话 数组只可以放255个数,你这道题目用链表或者几个数组来做吧

[此贴子已经被作者于2005-10-27 9:57:35编辑过]



c++/C + 汇编 = 天下无敌
2005-10-27 09:45
某人的马甲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-3
收藏
得分:0 
你记错了

2005-10-27 09:47
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
   经过我测试。
  #include&lt;iostream&gt;
using namespace std;
void main()
{
 int a[299];
 for(int i=0;i&lt;299;i++)
  a[i]=i+1;
 for(i=0;i&lt;299;i++)
  cout&lt;&lt;a[i]&lt;&lt;endl;
}
到 299都还正常。如果大过299就产生异常了。大家可以去试下。我是在vc++.net下测试的

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-10-27 10:00
某人的马甲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-3
收藏
得分:0 
[QUOTE]如果我没有记错的话 数组只可以放255个数,你这道题目用链表或者几个数组来做吧[/QUOTE]


为什么删我的贴?我好心提醒你你记错了,还要删我贴?请给个理由。

2005-10-27 10:02
某人的马甲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-3
收藏
得分:0 
以下是引用激情依旧在2005-10-27 10:00:21的发言: 经过我测试。 #include<iostream> using namespace std; void main() { int a[299]; for(int i=0;i<299;i++) a[i]=i+1; for(i=0;i<299;i++) cout<<a[i]<<endl; } 到 299都还正常。如果大过299就产生异常了。大家可以去试下。我是在vc++.net下测试的
如果是ASCII码,那么,其值是从0~255,我很不理解你意思?为什么会有256-299?为什么说大过299就不正常? 如果是Unicode双字符集大过299又怎会不正常?

2005-10-27 10:10
某人的马甲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-3
收藏
得分:0 
[QUOTE] int a[1000]={0} ;                  //先定义足够大的数组容纳1000阶剩的数[/QUOTE]


至于楼主的问题,1000!有2568位,所以,你的程序错了。

2005-10-27 10:14
某人的马甲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-3
收藏
得分:0 
#define STRMAX 514
#define P 100000
main()
{
long t[STRMAX]={0},a,b,c,g=0,x,e,p=P;

  t[STRMAX-1]=1;
  for (e=1;e&lt;=1000;e++)for(x=STRMAX-1;x&gt;=0;c=t[x],c*=e,a=c/p,b=c%p,t[x]=b+g,g=a,x--);
  printf("%ld",t[0]);
  for(x=1;x&lt;=STRMAX-1;printf("%.5ld",t[x]),x++);
  getch();
}

NNN年前写的,现在找出来,看看是否需要几个数组

2005-10-27 10:35
某人的马甲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-3
收藏
得分:0 
我这个算法是相当粗笨的,计算10000!(不是1000!)好的算法应该在数秒之内

2005-10-27 10:39
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
   我没删过你帖子。我那条程序是上机测试出来的。不信你可以去试下。我是在.net下测试的。我自己也想不明白为什么是300就会异常。

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-10-27 11:26
快速回复:1000的阶乘?
数据加载中...
 
   



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

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