【HDU】 1018 Big Number
2016-04-01 12:51
253 查看
Big Number
题目链接Big Number
题目大意
意思就是说有n个输入,每个输入有一个数x,现在让你求x!总共有多少位。
题解
这个题暴力肯定是不行的,考虑数学方法。
假设一个数x,现有10^(a-1)<=x<10^a . 那么这个数的位数就是a。
现在我们对两边取对数,我们得到a-1<=lg(x) < a,也就是两个式子:
a<=lg(x)+1
a>log(x)
于是我们可以求出a=(int)lg(x)+1。
用上面那个式子就已经可以解出这道题了,不过关于n!还有一个公式叫斯特林公式,可以近似的求出n!,我们用斯特林公式就可以更快的得到结果。
代码(斯特林公式版)
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; const double pi=3.1415926; const double e=2.71828182; double ans; int n,x; int main() { scanf("%d",&n); while (n--) { scanf("%d",&x); ans=1.0/2*log10(2*pi*x)+x*(log10(x)-log10(e)); printf("%d\n",(int)ans+1); } return 0; }
相关文章推荐
- Android初级开发----用Handle机制更新UI界面
- Openfire4.0.2源码部署到Eclipse
- Linux _msg 消息队列 demo
- 面向网络的PHP开发第26章
- Linux基本常识积累
- MAVEN 工程打包resources目录外的更多资源文件
- GDKOI 2014 基因模式 基于SAM的算法
- android graphic(20)—java层OpenGL相关类
- C/C++—— C++中一个空对象为什么还要占用一个字节空间
- 日常交通工具日语词汇
- Android跨进程通信
- Linux_ msg 消息队列
- 81192!请返航!
- 高效Android开发者必须知道的4个工具
- java中Socket编程
- 二分查找
- UVA - 10375 Choose and divide
- 实习生如何成功应聘
- CDOJ 1133 菲波拉契数制 01背包
- CMS垃圾回收器