大数阶乘的位数和精确值计算【转】

简介: 来源:http://www.cnblogs.com/stonehat/p/3603267.html 在此,顶礼膜拜一下原文作者呵呵   我们知道整数n的位数的计算方法为:log10(n)+1 故n!的位数为log10(n!)+1 如果要求出n!的具体值,对很大的n(例如n=1000000)...

来源:http://www.cnblogs.com/stonehat/p/3603267.html

在此,顶礼膜拜一下原文作者呵呵

 

我们知道整数n的位数的计算方法为:log10(n)+1
故n!的位数为log10(n!)+1
如果要求出n!的具体值,对很大的n(例如n=1000000)来说,计算会很慢,如果仅仅是求阶乘的位数,可以用斯特林(Stirling)公式求解

 

斯特林(Stirling)公式:

于是求n!的位数就是求log10((2*PI*n)^1/2*(n/e)^n)+1
即  1/2*log10(2*PI*n)+n*log10(n/e)+1
所以采用下面代码计算阶乘位数,会非常快
1 #define PI 3.141592654
2 #define E 2.71828182846
3 int l(int n)
4 {
5     int s=1;
6     if(n>3)
7         s=log10(2*PI*n)/2+n*log10(n/E)+1;
8     return s;
9 }

如果要计算阶乘的精确值,则可以采用下面代码。

 1 /*
 2 函数功能:计算并输出n 的阶乘
 3 返回值:阶乘结果的位数
 4 注意:     
 5      本程序直接输出n!的结果,需要返回结果请保留long a[]
 6      需要 math.h
 7 */
 8 
 9 int factorial(int n)
10 {
11     long a[10000];
12     int i,j,l,c,m=0,w; 
13     a[0]=1; 
14     for(i=1;i<=n;i++)
15     { 
16         c=0; 
17         for(j=0;j<=m;j++)
18         { 
19             a[j]=a[j]*i+c; 
20             c=a[j]/10000; 
21             a[j]=a[j]%10000; 
22         } 
23         if(c>0) {m++;a[m]=c;} 
24     } 
25 
26     w=m*4+log10(a[m])+1;
27     printf("\n%ld",a[m]); 
28     for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);
29     return w;
30 }

 

相关文章
|
安全 程序员 编译器
Python有多少个版本?不同Python版本之间有什么区别?我应该选择哪一个?
Python有多少个版本?不同Python版本之间有什么区别?我应该选择哪一个?
5872 0
Python有多少个版本?不同Python版本之间有什么区别?我应该选择哪一个?
|
7月前
|
运维 监控 Go
工具写得好,运维没烦恼——聊聊Python与Go开发运维工具的那些坑与妙招
工具写得好,运维没烦恼——聊聊Python与Go开发运维工具的那些坑与妙招
486 7
|
3月前
|
搜索推荐 开发者
阿里云账号实名认证教程方法(快速实名)2026年最新个人和企业用户实名认证全流程
本教程详解2026年阿里云最新实名认证流程:个人用户可通过支付宝扫码快速完成(5分钟内),企业用户支持法人扫脸、企业银行卡/支付宝等4种方式,最快几分钟通过。认证后可申领上云权益。
987 1
|
机器学习/深度学习 人工智能 文件存储
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
NVIDIA推出的Llama Nemotron系列推理模型,基于Llama架构优化,包含Nano/Super/Ultra三款,在数学推理、编程和工具调用等任务中展现卓越性能。
544 5
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
|
6月前
|
供应链 算法 API
1688 BAPI 实时询价比价技术解析:驱动智能采购决策
1688开放平台实时询价比价API重构B2B采购流程,通过动态询价引擎、多目标比价算法与智能预警系统,实现秒级响应、精准决策。支持并发请求、帕累托优化与价格波动预测,集成Python调用示例,助力企业采购周期缩短至5分钟内,决策错误率下降62%,服务超23万商家,日均处理200万+请求,推动供应链高效数字化转型。
|
12月前
|
SQL 人工智能 JavaScript
电脑文件直接搜索、和苹果电脑一样的功能,QuickLOOK-预览神器,能预览音频、视频、压缩文件、OFFICE三件套
QuickLook是一款强大的文件预览工具,支持图片、音频、视频、压缩包、Office文档等多种格式文件的快速预览。通过空格键即可实现类似MacOS的快捷预览功能。安装简单,支持扩展插件以增强功能,如源代码高亮、Markdown预览等。此外,还提供右键查看图片、音频、视频的详细信息功能,兼容多种主流格式,提升工作效率。
1670 1
|
设计模式 前端开发 JavaScript
前端必须掌握的设计模式——装饰器模式
装饰器模式是一种结构型设计模式,通过创建新类来包装原始对象,实现在不修改原有结构的前提下扩展新行为。其核心在于“组合”思想,使新功能可“即插即拔”。该模式具有解耦性、灵活性和动态性等特点,广泛应用于类的面向对象编程语言中,如JavaScript的注解和TypeScript的写法。示例中,通过装饰器模式为游戏角色动态添加装备,展示了其强大的扩展性和灵活性。
462 16
|
人工智能 自然语言处理 搜索推荐
AiChat—智能办公助手
在当今的数字化时代,人工智能(AI)已经在各个领域中展现出了强大的能力和潜力。AI在许多方面都为我们的生活带来了便利,其中最显著的一点就是在我们的日常交流和工作中。 现在,最简单的低门槛软件应该是AiChat……
186414 15
AiChat—智能办公助手
python 将绘制的图片保存为矢量图格式(svg)
python 将绘制的图片保存为矢量图格式(svg)
python 将绘制的图片保存为矢量图格式(svg)
|
缓存 语音技术 UED

热门文章

最新文章