poj 1423 打表/斯特林公式
2024-08-22 00:44:50
对于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;
}
}
最新文章
- Lattice Codes
- 安装交叉编译的 GCC 时出现的错误
- The Four Stages of Recovering a Project
- h5 web模板
- 设置Tomcat应用自动部署目录
- JVM笔记-temp
- Web缓存解决方案
- 浅谈 qmake 之 shadow build
- python unittest 测试笔记(二):使用Requests
- 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
- FFmpeg与libx264接口源代码简单分析
- XGBoost 与 Boosted Tree
- case &#183;&#183;&#183; when &#183;&#183;&#183; then &#183;&#183;&#183;&#183;的使用,同一字段不同内容分组显示
- jdk1.8之线程中断
- shell script exit if any command fails
- Excel中针对IP地址的排序方法
- TP5 强制下载PDF
- mysql 5.7 版本的安装
- SpringBoot整合日志
- Spring Cloud Eureka 实现服务注册与发现
热门文章
- Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
- JVM GC知识回顾
- 细说log4j
- HDU 1002 A + B Problem II(高精度加法(C++/Java))
- SSAS属性中更改AllowedBrowsingFolders的值后才能更改其它文件夹的值
- layui之事件监听(table)
- POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)
- SQL作业及调度创建
- Phpstorm10 主题下载
- ObjectiveC 深浅拷贝学习