Java 算法编程 N阶乘最后总位数问题
2015-08-06 20:05
323 查看
输入任意一个数字N(N>=1) 算出N的阶乘(N!)一共有多少位
比如输入10
10! = 3628800
10的阶乘是 3628800
位数为7
在比如输入25
25! = 15511210043330985984000000
一共有 26位
注意不能把某个数的阶乘算出在统计位数
这里用到了 斯特林公式,来自斯特林公式
如果用斯提林公式两边取对数,
log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
故n!的位数为 log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)
另一种基本解法 思路
n的位数为[lg10(n)]+1
n!的位数为[lg10(n*(n-1)*(n-2)*…..*1)]+1=[lg10(n)+lg10(n-1)+lg10(n-2) +….+lg10(1)]+1
比如输入10
10! = 3628800
10的阶乘是 3628800
位数为7
在比如输入25
25! = 15511210043330985984000000
一共有 26位
注意不能把某个数的阶乘算出在统计位数
这里用到了 斯特林公式,来自斯特林公式
如果用斯提林公式两边取对数,
log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
故n!的位数为 log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)
另一种基本解法 思路
n的位数为[lg10(n)]+1
n!的位数为[lg10(n*(n-1)*(n-2)*…..*1)]+1=[lg10(n)+lg10(n-1)+lg10(n-2) +….+lg10(1)]+1
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统