hdu1018——Big Number
2016-01-13 09:25
267 查看
Big Number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32419 Accepted Submission(s): 15180
[align=left]Problem Description[/align]
In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of
digits in the factorial of the number.
[align=left]Input[/align]
Input consists of several lines of integer numbers. The first line contains an integer n, which is the number of cases to be tested, followed by n lines, one integer 1 ≤ n ≤ 107 on each line.
[align=left]Output[/align]
The output contains the number of digits in the factorial of the integers appearing in the input.
[align=left]Sample Input[/align]
2 10 20
[align=left]Sample Output[/align]
7 19
前两天写了N!的共精度实现,于是这题仍然妄想会直接想过,暴力算出N!,然后输出位数然。
于是。。。超时!
#include<iostream> #include<cstdio> using namespace std; long num[10000000]; int main() { int n; scanf("%d",&n); while(n--) { int a; scanf("%d",&a); long i,j,c,m=0; num[0]=1; for(i=1;i<=a;i++) { c=0; for(j=0;j<=m;j++) { num[j]=num[j]*i+c; c=num[j]/10; num[j]%=10; } while(c) { num[++m]=c%10; c/=10; } } printf("%d\n",m+1); } return 0; }之后想到了找规律的方法,分别找到了a的取10的对数,a开平方的数都没发现规律。也根据位数直接做了一些判断,还是不行。
晚上睡觉前,看了别人的博客,发现要走的路还很长!
求一个数n的位数,直接求n以10为底的对数不就好了吗?然后由于是阶乘,直接用公式化简,空间复杂度o(n)
通过这道题,还学到了另一个重要的东西——斯特林公式
然后直接用求对数的方法来求这个解;空间复杂度o(1),有些东西简直不敢相信!
#include<iostream> #include<cmath> #define PI 3.1415926 using namespace std; int main() { int n; cin>>n; while(n--) { double a,res; cin>>a; res=(0.5*log(2*PI*a)+a*log(a)-a)/log(10)+1; cout<<(int)res<<endl; } return 0; }
确实从开始的超时,到最后的o(1)让人难以置信,要走的路还很长!加油!
相关文章推荐
- 【HTML打卡】0112-html发展、doctype声明
- mac 常用命令
- CUDA编程指南阅读笔记
- HPUX 11.31 MC/SG恢复丢失的锁盘
- 深浅copy
- 高性能MySql设计之查询优化
- 如何用Maven创建web项目(具体步骤)
- Hibernate
- qemu创建虚拟机,gdb调试及网络配置
- SQLite---VACUUM命令分析
- 【代码笔记】仿安卓,本页出现多个选择项
- MFC 对话框之单选按钮-Radio
- JSP知识点总结
- try catch finally中的return
- 【代码笔记】仿安卓,本页出现多个选择项
- 于UIImage图片处理详细使用
- Ajax 乱码解决 方法之一。
- 使用Maven构建一个简单的java工程
- iOS UIFont 字体名字大全
- Android之扫描文件或文件夹