数的长度
来源:互联网 发布:数据库设计有哪些步骤 编辑:程序博客网 时间:2024/05/22 15:25
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,k;
int n,N;
scanf("%d",&n);
while(n--)
{
double M=0;
scanf("%d",&N);
for(j=1; j<=N; j++)
M+=log10(j);
k=M+1;
printf("%d\n", k);
}
return 0;
#include<math.h>
int main()
{
int i,j,k;
int n,N;
scanf("%d",&n);
while(n--)
{
double M=0;
scanf("%d",&N);
for(j=1; j<=N; j++)
M+=log10(j);
k=M+1;
printf("%d\n", k);
}
return 0;
}
/* NYOJ69 阶乘数位长度
* 方法一:
* 可设想n!的结果是不大于10的M次幂的数,即n!<=10^M(10的M次方),则不小于M的最小整数就是 n!的位数,对
* 该式两边取对数,有 M =log10^n! 即:M = log10^1+log10^2+log10^3...+log10^n 循环求和,就能算得M值,
* 该M是n!的精确位数。当n比较大的时候,这种方法方法需要花费很多的时间。
*
* 方法二:
* 利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:
* res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );
* 当n=1的时候,上面的公式不适用,所以要单独处理n=1的情况!
* 有关斯特林(Stirling)公式及其相关推导,这里就不进行详细描述,有兴趣的话可看这里。
* 这种方法速度很快就可以得到结果。详细证明如下:
*
- 数的长度
- 数的长度
- 数的长度
- NYOJ - 数的长度
- 数的长度
- 数的长度
- 数的长度
- 数的长度
- acm-数的长度
- 数的长度
- NYOJ_69数的长度
- NYOJ69数的长度
- 数的长度
- 数的长度
- NYOJ69数的长度
- 69 数的长度
- NYOJ-数的长度
- nyoj69数的长度
- C++STL介绍
- Java常用类库--对象克隆技术clone
- ios实现用户登录的保存密码功能
- 请求码和结果码
- 关于Android中的消息机制和异步
- 数的长度
- 斯坦福大学公开课:编程方法学——Karel作业的第四题
- 谈谈SQL 语句的优化技术 (1)
- Linux与VxWorks主要区别(五):请求内核服务方式
- WFS的代理设置(Apache)
- VS2008打开资源文件时显示说没有安装这个ActiveX控件 "{648A5600-2C6E-101B-82B6-000000000014
- Boost.Bind和Boost.Function的一种搭配使用法
- vc2010编译opencv2.4.6 【1】
- Linux与VxWorks主要区别(六):实时性