CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一个程序拿出来show show,求n的阶乘保留小数点后16位,在P41.7G下计算100万的阶乘大概是1秒。大家给点意见

楼主ywhbn(天涯)2004-12-03 01:34:00 在 C/C++ / C语言 提问

//   求n的阶乘保留小数点后16位,1.0e+300   进制  
  //   代码简单就不注释了,在P41.7G,256M内存下计算100万的阶乘大概是1秒  
   
  #include   <stdio.h>  
  #include   <math.h>  
  #include   <stdlib.h>  
  #include   <string.h>  
  #include   <time.h>  
   
  //   读浮点数的指数  
  #define   get_exp(p)   (   atoi(p   +   strlen(p)   -   3)   )  
   
  main()  
  {  
  time_t  
  stime,  
  etime;  
  unsigned   char    
  pr[50];  
  unsigned   long   int  
  n,  
  re;  
  unsigned   long   int   register    
  i;  
  double  
  r;  
   
  while(1)  
  {  
  printf("input   n   [<=1.0e+8   ,   0   --   exit]   :");  
  scanf("%ld",   &n);   //   n不是整数会死循环  
  if(!n)  
  break;  
  r   =   1.0;  
  re   =   0;  
  //   开始计算  
  time(&stime);  
  for(i   =   2;   i   <=   n;   i++)  
  {  
  r   =   r   *   i;  
  if(r   >=   1.0e+300)  
  {  
  r   /=   1.0e+300;  
  re   +=   300;  
  }  
  }  
  time(&etime);  
  sprintf(pr,   "   %d!   =   %.20e",   n,   r);  
  sprintf(pr+strlen(pr)-3,   "%ld",   get_exp(pr)+re);  
  printf("   %s   \n   ",   pr);  
  printf("   use   time:   %.4f   s\n",   difftime(etime,   stime));  
  }  
  } 问题点数:0、回复次数:13Top

1 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2004-12-03 01:47:04 得分 0

调试不通过Top

2 楼ywhbn(天涯)回复于 2004-12-03 01:53:06 得分 0

用   VC++   编译,我是在VC++6.0下写的Top

3 楼yjh1982(血精灵)回复于 2004-12-03 08:08:41 得分 0

gzTop

4 楼ywhbn(天涯)回复于 2004-12-03 10:00:18 得分 0

计算的就是这几句:  
  for(i   =   2;   i   <=   n;   i++)  
  {  
  r   =   r   *   i;  
  if(r   >=   1.0e+300)  
  {  
  r   /=   1.0e+300;  
  re   +=   300;  
  }  
  }  
  结果保存在   r和re   里Top

5 楼yongxinwork(永新)回复于 2004-12-03 16:17:46 得分 0

用这种方法行不通,  
  10万的阶层估计已经overflow了,  
  100万早就完蛋了,  
   
  Top

6 楼idler(告别teenage)(偶是豆子。。。)(歇业休息。。。)回复于 2004-12-03 16:26:27 得分 0

楼主这个程序素那天上的浮云。。。Top

7 楼bobedong(bobedong)回复于 2004-12-03 16:29:19 得分 0

软件测量的时间不准确,最好用硬件信号,Top

8 楼copygirl(wa!)回复于 2004-12-03 16:29:37 得分 0

好玩,带回家玩Top

9 楼idler(告别teenage)(偶是豆子。。。)(歇业休息。。。)回复于 2004-12-03 16:52:00 得分 0

实测结果精度在10位有效数字,误差还是大了一点。楼主的方法其实是用来估计结果的数量级的。Top

10 楼lswx(柳树)回复于 2004-12-03 16:55:12 得分 0

听课中...Top

11 楼ywhbn(天涯)回复于 2004-12-07 22:37:46 得分 0

idler(Idler)     说的好,就是用来估计结果的数量级       呵呵Top

12 楼ywhbn(天涯)回复于 2004-12-07 22:38:35 得分 0

to:   yongxinwork(永新),不会overflew的,你试试Top

13 楼gzconan84(柯南)回复于 2004-12-08 22:55:21 得分 0

路过,学习ing~!Top

相关问题

  • 求m和n的阶乘
  • 求教n的阶乘的算法。
  • 考研试题:N!(N的阶乘)末尾有多少个零?
  • 求阶乘!!!
  • 30的阶乘?
  • 30的阶乘?
  • 我自己编的一个用动态链表求n阶乘的程序,请各位指教
  • C#写的一个N阶乘的递归算法 运行出现异常,请大家帮忙
  • 解释 J-a-p-a-n-e-s-e
  • 阶乘问题(典型)!!

关键词

  • vc++
  • 阶乘
  • e+300
  • 计算
  • etime
  • pr
  • 估计
  • re
  • 结果
  • unsigned

得分解答快速导航

  • 帖主:ywhbn

相关链接

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

广告也精彩

反馈

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