1018http://acm.hdu.edu.cn/showproblem.php?pid=1018

在其中要体现一下几个问题:

一、一个整数的位数计算

二、优化算法

设有一个整数n,且10x-1≤n<10x ,那么我们可以得出其n的位数是x

由于题目中已知1 ≤ n ≤ 107 所以同时去lg对数则:lg10x-1≤lg n<lg10得到x-1≤lg n< x所以(int)lg n = x-1

最终得出x = (int)lg n +1;

所以求n阶乘的可以变换成:

(int)lg (1*2*3···*n) +1

在这里可以用下面for代码实现:

sum = 0.0;
for ( j = 1.0; j < num+1; j++)
{sum += (log10(j));
}
sum += 1;

其完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>int main(){int n,i,num;double sum,j;scanf_s("%d", &n);for ( i = 0; i < n; i++){scanf_s("%d", &num);sum = 0.0;for ( j = 1.0; j < num+1; j++){sum += (log10(j));}sum += 1;printf_s("%d\n", (int)sum);}
}

但是在时间复杂度上我们可以看到O(n*(num+1))

Run ID Submit Time Judge Status Pro.ID Exe.Time Exe.Memory Code Len. Language Author
9886801 2013-12-24 13:40:57 Accepted 1018 406MS 248K 305 B C  

在优化中我们可以使用斯特林公式的简化公式

该公式常用来计算与阶乘有关的各种极限。
此为斯特林公式的简化公式。
故此我们可以将内侧的foe循环代码改进
Run ID Submit Time Judge Status Pro.ID Exe.Time Exe.Memory Code Len. Language Author
9886934 2013-12-24 14:23:40 Accepted 1018 15MS 248K 360 B C  
#include <stdio.h>
#include <stdlib.h>
#include<math.h>#define PI  3.1415926535898
#define E   2.71828182845904523536028747135266250int main(){int n,i,num;double sum,j;scanf_s("%d", &n);for ( i = 0; i < n; i++){scanf_s("%d", &num);        sum = log10(sqrt(2.0 * PI * num)) + num * log10(num / E);printf_s("%d\n", (int)sum + 1);}
}

转载于:https://www.cnblogs.com/songyy/p/3488978.html

1018Big Number用斯特林公式的简化公式和不用公式解决相关推荐

  1. HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】

    1:把n!写成10^m次方的形式,如果m=2,就说明是三位数. [维基百科] [别处摘来的]可以将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小 ...

  2. 杭电oj HDOJ 1018 Big Number(斯特林公式求大数阶乘的位数)

    杭电oj HDOJ 1018 Big Number 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Problem Description In ...

  3. 斯特林公式、沃利斯公式

    目录 一,斯特林公式 1,公式 2,证明 3,更多项 4,变形 二,沃利斯公式 1,公式 2,变形 一,斯特林公式 1,公式 2,证明 3,更多项 用以上方法可以求出  的前任意多项. 4,变形 两边 ...

  4. mysql报错-ERROR 1206 (HY000)- The total number of locks exceeds the lock table size-的解决方法

    mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法 问题 ...

  5. allegro SPMHDB-225 The maximum number of text sizes has been reached.错误解决办法

    allegro 在使用一个常用库元件的时候报allegro SPMHDB-225 The maximum number of text sizes has been reached.元件不能放置. 分 ...

  6. excel去重怎么操作_excel数据技巧:不用公式如何快速去重

    编按:哈喽,大家好!在我们平时处理数据的时候,经常会发现一些重复的数据,这不仅会降低我们的工作效率,还会影响我们后续对数据的分析.今天就为大家分享4种不借助公式就能在excel中删除重复值的方法,赶紧 ...

  7. 当电脑所有浏览器主页被篡改无法修改,一个不用工具解决的方法

    这种网页被篡改的情况要多恶心有多恶心,问题是用了很多工具还都搞不定. 由于工作需要准备很多的浏览器,但是一个浏览器中招,其他浏览器会无一幸免. 要多恶心有多恶心,先看看这个恶心的网址. https:/ ...

  8. Excel竖向转横向 并汇总 简单方法(非转置,不用公式)

    目录 背景: 目前的解决方案: 1.数据透视表: 2.公式: 3.使用Power Query编辑器的[透视列]功能: 4.Python 简单的方案: 思路: 步骤1:创建辅助排序列 步骤2:筛选序号 ...

  9. 不用重装解决抖音登录提示:访问太频繁,请稍候再试,亲测有效!!!

    自己有一个抖音号在主力机安全中心远程下机后备用机不小心被下了导致一直登不上 一直提示:访问太频繁,请稍后再试 等了半天还是一样的提示,不管是切换WIFI还是改xposed应用变量参数甚至卸载重装都一样 ...

最新文章

  1. SLAM精度测评——EVO进阶
  2. django中的缓存以及跨域
  3. c++入门之——const在函数名前面和函数后面的区别
  4. java高级之注解详解
  5. 什么是程序员的模式化思维方式?
  6. jquery ready() 与window onload的区别
  7. 主力吸筹猛攻指标源码_成功率90%以上【主力吸筹+买点提示+使用方法】通达信指标公式源码...
  8. 百度离线地图API v3.0开发解决方案
  9. 基于 MindStudio 完成 SE-ResNeXt101- PyTorch 模型开发
  10. 操作员或系统管理员拒绝了请求(0x800710E0) win10系统任务计划程序执行失败
  11. 【双足轮机器人】Ascento技术详解--(1)摘要和引言(2)系统描述【翻译】
  12. GMS认证环境搭建-终极篇
  13. 两个网段共享打印机_不同ip段共享打印机设置方法
  14. 理解计算 从根号2到AlphaGo 第3季神经网络的数学模型
  15. 去除数字的正则表达式
  16. Xilinx ZYNQ简介
  17. 中国式危机公关9加1策略(第七章 道歉先行策略)
  18. Http--跨域请求
  19. VS2017 如何打包软件
  20. 诗:《假如生活欺骗了你》

热门文章

  1. html5 session 缓存,关于HTML5中的sessionStorage的会话级缓存使用
  2. 阿里巴巴2020首发136道Java高级岗面试题(含答案)
  3. android 倒计时 动画下载,倒计时器app下载-倒计时器安卓最新版-幻想游戏网
  4. 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
  5. arm微软服务器,ARM扬帆 借力微软 杀进服务器市场
  6. java 反射 构造器_Java之类的构造器(反射)
  7. 不小心点了计算机一键还原怎么操作,电脑一键还原在哪里?电脑怎样一键还原系统...
  8. 机器学习、数据挖掘之中国大牛
  9. 对于目前流行的量化投资与smart beta策略的一些看法
  10. terminal显示mysql_mac如何在terminal终端中操作mysql