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

ywhbn 2004-12-03 01:54:56
// 在VC++6.0下写的
// 求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));
}
}
...全文
204 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aladar 2004-12-05
  • 打赏
  • 举报
回复
看到1e300进制就吐了,你拿浮点玩来着?精度太低了吧。。。还100万呢-_-!!
idler 2004-12-04
  • 打赏
  • 举报
回复
怎么又发了。。。
100万的精度是10位有效数字
clin003 2004-12-04
  • 打赏
  • 举报
回复
不客气了 ,先坐了先
ywhbn 2004-12-03
  • 打赏
  • 举报
回复
计算的就是这几句:
for(i = 2; i <= n; i++)
{
r = r * i;
if(r >= 1.0e+300)
{
r /= 1.0e+300;
re += 300;
}
}
结果保存在 r和re 里
mathe 2004-12-03
  • 打赏
  • 举报
回复
弄错了一步,m=n就可以了,不需要m=n+1.
mathe 2004-12-03
  • 打赏
  • 举报
回复
#define M_PI 3.141592653589793
double v;
while(1)
{
printf("input n [<=1.0e+8 , 0 -- exit] :");
scanf("%ld", &n); // n不是整数会死循环
if(!n)
break;
if(n>1000){
int m=n+1;
int intpart;
v=log(2*PI*m)/2.0+m*log(m)-m+1/(12*m)+1/(288.0*m*m)-139/(51840.0*m*m*m)-571/(2488320.0*m*m*m));
v/=log(10.0);
intpart=(int)v;v-=intpart;
v*=log(10.0);v=exp(v);
printf("%fe+%d\n",v,intpart);
}else{
v=1.0;
for(i=1;i<=n;i++)v*=i;
printf("%f\n",v);
}
imRainman 2004-12-03
  • 打赏
  • 举报
回复
不错,有创意。

可以用在不要求精确结果的地方~
dot99 2004-12-03
  • 打赏
  • 举报
回复
去算法版研究一下先:D
mathe 2004-12-03
  • 打赏
  • 举报
回复
可是你的代码太慢了:)
masse 2004-12-03
  • 打赏
  • 举报
回复
……汗

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧