杭电oj HDOJ 1018 Big Number

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1018

Problem Description

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.

Input

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.

Output

The output contains the number of digits in the factorial of the integers appearing in the input.

题目大意

求每一个测试用例的阶乘的位数,测试用例的范围在1~107

解题思路

由于本题测试用例的范围较大,如果使用“递归”和“循环”来解题一定会超时!所以要寻找另一种的解题方法。

  • 计算一个数的位数:lg(n)+1lg(n)+1lg(n)+1因为本题中的数是10进制,所以对数是以10为底的,推广开来,m进制数n的位数为logmn+1{log}_{m}n+1logm​n+1
  • 计算一个数的阶乘:在这里使用“斯特林公式”n!≈2πn(ne)nn! \approx \sqrt[]{2\pi n}(\frac{n}{e})^nn!≈2πn​(en​)n然后两边取对数得:lg(n!)=lg(2πn)2+nlg(ne)lg(n!)=\frac{lg(2\pi n)}{2}+nlg(\frac{n}{e})lg(n!)=2lg(2πn)​+nlg(en​)
  • 最后再把上面得到的对数加111就得出了n!n!n!的位数!

本人的C++解决方案

#define _USE_MATH_DEFINES
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;int main()
{int n, i, num, res;double temp1, temp2;cin >> n;for (i = 0; i < n; i++) {cin >> num;temp1 = log10(2 * M_PI * num);temp2 = log10(double(num) / M_E);res = int(temp1 / 2 + num * temp2);printf("%d\n", res + 1);}return 0;
}

代码通过HDOJ平台运行检查,如发现错误,欢迎指出和纠正,谢谢!

杭电oj HDOJ 1018 Big Number(斯特林公式求大数阶乘的位数)相关推荐

  1. 杭电oj HDOJ 2072 单词数

    杭电oj HDOJ 2072 单词数 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是 ...

  2. 杭电OJ(HDOJ)入门题目列表

    杭电OJ链接: http://acm.hdu.edu.cn/ 注册与使用指南: https://blog.csdn.net/qq_38769551/article/details/101510000 ...

  3. 杭电OJ,已重新开放!HDOJ

    前几天我们介绍了网络上有很多可以练习上机考试刷题的网站,叫做OJ(Online Judge).还提到了一些学校已经公布了复试上机的说明,可以提前练习. 已经有211大学发布计算机专业,研究生复试上机考 ...

  4. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  5. 杭电OJ分类题目(2)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(2) HDU Water~~~ HDU 100 ...

  6. 杭电OJ分类题目(1)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(1) HDU Introduction HDU ...

  7. 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)

    赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong   Date   : 2015-09-17    HomePage : http://  E ...

  8. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  9. 杭电OJ——第1000,1001题

    今天第一次接触杭电OJ,感觉很新奇有趣.希望从今天开始其乐无穷的刷题之路吧 1000题: Problem Description Calculate A + B. Input Each line wi ...

最新文章

  1. Hibernate悲观锁/乐观锁
  2. 云炬Android开发笔记 14 个人中心、图片裁剪、图片上传、收货地址、消息推送、权限管理等功能开发与一键式封装
  3. rust挖油机怎么整_挖掘机发动机进气管断裂该怎么办?
  4. java 嵌套类: Nested classes
  5. 03-29 健壮性测试
  6. poj 1273 最大流
  7. 解决Android单个dex文件不能超过65536个方法问题
  8. H5搜索页调起软键盘
  9. 大数据新闻推送你怎么看_“大数据”新闻推送中存在的不足与改进
  10. VMware Esxi 下载地址
  11. JAVA小乌龟游泳_描写乌龟游泳的作文
  12. Mac访达查看隐藏文件的快捷键、命令行设置两种方式
  13. DMA导致的CACHE一致性问题解决方案
  14. 9.3 parity概述
  15. 三维模型是什么?3D建模都有什么用处?
  16. 优秀logo,最基础的设计技巧(二)
  17. 【SysML】模型图概览
  18. 软件的成本与定价如何决策?PMP软件开发规模估算和成本估算方法详解
  19. python word保存图_Python 将本地图片存储到 Word 文档
  20. Cytoscape.js – 用于数据分析和可视化的交互图形库

热门文章

  1. JSP[jsp文件]
  2. 蓝牙音频双剑客(二)--高质量音频分布协议(A2DP) SBC编解码算法
  3. Flink之流处理API之Sink
  4. 赛马网基本算法之--研究生考试
  5. 【实验楼挑战】Python3简明教程:字符串挑战
  6. mysql联合查询数据重复_多表联合查询导致的数据重复问题
  7. Python3网络爬虫:网易新闻App的广告数据抓取
  8. python求基本勾股数_第一章:勾股数组(1)
  9. 计算机黑屏问题,电脑黑屏怎么办?
  10. 最早的一次hacker经历