对于n位数的计算,我们可以采用(int)log10(n) + 1的方法得到n的位数

第一种方法:

对于n!位数的计算,log10(n!) = log10(1) + log10(2) + ... + log10(n)

为防止直接暴力超时这部分运算可以打表等待主程序调用

#include<iostream>
#include<cmath>
using namespace std; const int MAXN = 1e7;
int ans[MAXN +]; void action(int m)//打表计算n!位数,存在ans数组中
{
double d = ;
for(int i = ;i<=m;i++)
{
d += log10(double(i));//累加log10(i)
ans[i] = (int)d + ;//向下取整并+1
}
} int main()
{
int n,m;
cin>>n;
action(MAXN);
while(n--)
{
cin>>m;
cout<<ans[m]<<endl;
}
return ;
}

第二种方法:

对于n!的计算,也可以用斯特林公式:

然后直接计算(int)log10(n!) + 1

#include<iostream>
#include<cmath>
using namespace std; double pi = acos((double)-); int main()
{
int n,m;
cin>>n;
while(n--)
{
cin>>m;
cout<<(int)(log10(sqrt( * m * pi) )+ m * log10(m / exp((double))))+ <<endl;
}
}

最新文章

  1. Lattice Codes
  2. 安装交叉编译的 GCC 时出现的错误
  3. The Four Stages of Recovering a Project
  4. h5 web模板
  5. 设置Tomcat应用自动部署目录
  6. JVM笔记-temp
  7. Web缓存解决方案
  8. 浅谈 qmake 之 shadow build
  9. python unittest 测试笔记(二):使用Requests
  10. 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
  11. FFmpeg与libx264接口源代码简单分析
  12. XGBoost 与 Boosted Tree
  13. case &#183;&#183;&#183; when &#183;&#183;&#183; then &#183;&#183;&#183;&#183;的使用,同一字段不同内容分组显示
  14. jdk1.8之线程中断
  15. shell script exit if any command fails
  16. Excel中针对IP地址的排序方法
  17. TP5 强制下载PDF
  18. mysql 5.7 版本的安装
  19. SpringBoot整合日志
  20. Spring Cloud Eureka 实现服务注册与发现

热门文章

  1. Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
  2. JVM GC知识回顾
  3. 细说log4j
  4. HDU 1002 A + B Problem II(高精度加法(C++/Java))
  5. SSAS属性中更改AllowedBrowsingFolders的值后才能更改其它文件夹的值
  6. layui之事件监听(table)
  7. POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)
  8. SQL作业及调度创建
  9. Phpstorm10 主题下载
  10. ObjectiveC 深浅拷贝学习