CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

求救!!!!!!!!!!!!!!!!!!

楼主twtmnm1314(狂风大侠)2003-06-04 12:45:01 在 C/C++ / C语言 提问

请问10000的阶乘的算法.  
  主要就是乘完之后没有哪一种类型的数据来存贮.  
  请各位大虾们帮帮小弟.  
  小弟不胜感激.  
  有结果可发给小弟.twtmnm1314@163.com 问题点数:0、回复次数:11Top

1 楼0738111080(爱)回复于 2003-06-04 12:46:55 得分 0

发我一份了  
          07738111080@163.comTop

2 楼flab_lwq()回复于 2003-06-04 12:57:04 得分 0

可以用链表啊,也可以用数组  
  比如20!=2432902008176640000  
  可以用一个int类型的数组存储:a[0]=0000,   a[1]=7664,   a[2]=81,   a[3]=2902,   a[4]=243Top

3 楼spiderbat(spdier)回复于 2003-06-04 13:10:46 得分 0

这做起来可麻烦了,是不是参加程序设计比赛呀,你可以自己定义一个结构然后用链表聊起来,具体对它的操作就麻烦了,这小弟也不会了!不过结构是这样的:  
  struct   number   {  
                                int   data;  
                                struct   number   *next;  
                                }  
  入过那位有好的方案请告诉小弟一声,不胜感激!:)还给分!Top

4 楼three1103(扬华)回复于 2003-06-04 13:17:27 得分 0

也发我一份了:three1103@sina.com  
  Top

5 楼shenyiwen(沈亦文)回复于 2003-06-04 13:18:52 得分 0

任意精度运算,考得就是这个。Top

6 楼greatzhum(纯净水)回复于 2003-06-04 13:33:26 得分 0

我也想知道!!!  
  ---------------------------------------------------------------------------------  
    回复人:   flab_lwq()   (   )   信誉:100     2003-06-04   12:57:00     得分:0    
     
      可以用链表啊,也可以用数组  
  比如20!=2432902008176640000  
  可以用一个int类型的数组存储:a[0]=0000,   a[1]=7664,   a[2]=81,   a[3]=2902,   a[4]=243  
  ---------------------------------------------------------------------------------  
  请问:flab_lwq(),你怎样把那么大的一个数拆分后放入数组?   “2432902008176640000”这么大的数可以用double型,有效数字也够,但是如果更大呢?怎么把它拆分呢?希望不啻吝教。我也在做这方面的东西。  
     
  Top

7 楼sxbobo2002(五月雪)回复于 2003-06-04 13:35:49 得分 0

可以用高精度  
  或者分块存储如flab_lwq()   所说.Top

8 楼cnxiaohai(相声独一处(回归,为了编程,为了C,为了CSDN))回复于 2003-06-04 16:18:12 得分 0

要是算末尾有几个0我会  
   
  呵呵  
   
  这个吗?  
   
  还是听听各位大哥的。  
   
  有代码吗?  
   
  来一个看看~~~~~~~~~~~~~~~~~~~~~~~~~~~Top

9 楼flab_lwq()回复于 2003-06-04 16:53:32 得分 0

抛砖引玉  
  #include   <iostream.h>  
   
  int   main()  
  {  
  const   int   MAXSIZE   =   30000;  
  const   int   STORAGE   =   10000;  
  long   a[MAXSIZE];  
  int   i,   num;  
  unsigned   long   result,   carrier   =   0;  
  cout   <<   "pls   input   the   number:   "   <<   flush;  
  cin   >>   num;  
  //init   the   stored   data   array  
  for(i   =   0;   i   <   MAXSIZE;   i++)   a[i]   =   -1;  
  a[0]   =   1;  
  i   =   0;  
  do   {  
  //go   to   head   of   stored   data   array  
  i   =   0;  
  while(a[i]   !=   -1)   {  
  result   =   num   *   a[i]   +   carrier;  
  carrier   =   result   /   STORAGE;  
  a[i++]   =   result   %   STORAGE;  
  }  
  //if   carry   occur,   operate   it  
  while(carrier   !=   0)   {  
  a[i++]   =   carrier   %   STORAGE;  
  carrier   /=   STORAGE;  
  }  
  }while(--num   >   1);  
  //输出最高位的一组数字  
  cout   <<   a[--i]   <<   '   ';  
  for(i--;   i   >=   0;   i--)   {  
  //保证每个数组输出都为4位,不够位数的补0,很苯的方法  
  if(a[i]   >   1000);    
  else   if(a[i]   >   100)   cout   <<   "0";  
  else   if(a[i]   >   10)   cout   <<   "00";  
  else   cout   <<   "000";  
  cout   <<   a[i]   <<   '   ';  
  }  
   
  }  
  Top

10 楼HEROWANG(让你望见影子的墙)回复于 2003-06-04 17:59:25 得分 0

我有一个想法:不知可行不可行,刚想出来的,没试过的!  
  先做一个数据类型和字符类型相互转化的类,然后把乘积乘字符串型的,  
  那么无论成绩有多么大,字符串都可以方的下的。要输出结果时,只要输入  
  这个字符串就行了。  
  不知大家一位如何哪?如果谁有这个想法,或者作出接过来,麻烦通知我一下的!Top

11 楼flytercel(天涯飞鹰)回复于 2003-06-04 19:28:03 得分 0

可不可以用数组,比如用一个一维数组(要足够大),然后象小学学的那样用算式乘法计算,要进位就加到它的前一位,我想是应该可以实现的,不过还没有实验,Top

相关问题

关键词

  • 数组
  • flab
  • lwq
  • 小弟
  • 存储
  • 可以用
  • 类型

得分解答快速导航

  • 帖主:twtmnm1314

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo