一.log函数

头文件:

#include <math.h>

使用

引入#include<cmath>

以e为底:log(exp(n))

以10为底:log10(n)

以m为底:log(n)/log(m)

重点:log()与log10()不是相同的函数
double log(double x);  /* 计算一个数字的自然对数 */
double log10(double x);  /* 计算以10为基数的对数 */

引申:

lg(1*2*3*4*5*...)=lg1+lg2+lg3+lg4+......;

若要计算sum的对数,假如是以10为底,而sum=1*2*3*4*5*...

则可以:lg(1*2*3*4*5*...)=lg1+lg2+lg3+lg4+......;

例题:poj 1423

数学解法:

#include<iostream>
#include<math.h>
using namespace std;
int num[];
int main()
{
int n;
cin>>n;
// lg(1*2*3*4*5*...)=lg1+lg2+lg3+lg4;
//其sum的位数是log10(sum)+1;
double t=;
for(int i=;i<=;i++)
{
t+=log10((double)i);
num[i]=(int)t+;//下标应为整型
}
while(n--)
{
int h;
cin>>h;
cout<<num[h]<<endl;
}
}

题目大意:求n的阶乘的位数,即n!的位数

sum=n!,其位数为log10(sum)+1;

相当于log10(1*2*3*4*5*...)=lg1+lg2+lg3+lg4+.....

double t=0;

for(int i=1;i<=n;i++)     //得到n的阶乘y      log10(x)所得的数有些是小数,定义为double

{

t+=log10((double)i);     //注意这里的log10(i)里面的i一定要加一个强制转换,与t的数据类型相同,否则会报错

y=(int)t+1;

}

注意小tips:

1.a[i],数组下标i应为int型,否则会出现compile error

2.y=log10(x),其中y与x的数据类型应相同,否则会出现compile error(错误信息:对重载函数的调用不明确)

二.斯特灵公式

斯特灵公式是一条用来取n阶乘近似值数学公式

一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用。即使在n很小的时候,斯特灵公式的取值也十分准确。

公式:n!约等于sqrt(2*pi*n)*[(n/e)^n]

n越大精确度越高,我们这只需求n!的位数,所以我们可以用该公式

ac代码:

#include<iostream>
#include<cmath>
using namespace std;
const double e=2.7182818284590452354,pi=3.141592653589793239;
double solve(int n)
{
return (log10(*pi*n))/2.0+n*(log10(n/e));//这里指数都化为乘积数
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<(int)solve(n)+<<endl;
} }

n阶乘,位数,log函数,斯特林公式的更多相关文章

  1. 【HDOJ1018】【大数阶乘位数】【斯特林公式】

    http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big Number Time Limit: 2000/1000 MS (Java/Others)     ...

  2. HDU 1018(阶乘位数 数学)

    题意是求 n 的阶乘的位数. 直接求 n 的阶乘再求其位数是不行的,开始时思路很扯淡,想直接用一个数组存每个数阶乘的位数,用变量 tmp 去存 n 与 n - 1 的阶乘的最高位的数的乘积,那么 n ...

  3. FZU 2032 Log函数问题 模拟小数加法

    题目链接:Log函数问题 2 / 49 Problem G FZU 2032 Log函数问题 不知道为什么...比赛时高精度难倒了一票人...成功搞出大新闻... 试了一下直接double相加超时,然 ...

  4. math。h中的log函数的应用

    以10为底的log函数: 形式为 double  log10(double  x) 以e为底的log函数(即 ln)double log (double x) 如何表达log 以a为底b的对数: 用换 ...

  5. LeetCode 326 Power of Three(3的幂)(递归、Log函数)

    翻译 给定一个整型数,写一个函数决定它是否是3的幂(翻译可能不太合适-- 跟进: 你能否够不用不论什么循环或递归来完毕. 原文 Given an integer, write a function t ...

  6. matlab中log函数与rssi转距离

    我们通常所说的log是指以10为底的对数,而MATLAB中的log却不是这样.Matlab中的log函数在默认情况下是以e为底,即loge,如果需要计算以10为底的对数,那么需要用log10()函数. ...

  7. Java实现第九届蓝桥杯阶乘位数

    阶乘位数 题目描述 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞&qu ...

  8. java实现第七届蓝桥杯阶乘位数

    阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:1011000100110000000 这个数字共有19位. 请你计算,9999 的阶乘的二进制表示一共有多少位? 注意:需要提交的是 ...

  9. java实现第四届蓝桥杯阶乘位数

    阶乘位数 题目描述 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格 ...

随机推荐

  1. Win10_禁用自动更新(官方版)

    1> win键>输入服务>打开>找到windowsUpdate-->启动类型为-禁用 -->> 恢复失三个选项改为-->>无操作 2>win ...

  2. R: 主成分分析 ~ PCA(Principal Component Analysis)

    本文摘自:http://www.cnblogs.com/longzhongren/p/4300593.html 以表感谢. 综述: 主成分分析 因子分析 典型相关分析,三种方法的共同点主要是用来对数据 ...

  3. Dapper相关了解

    公司新项目用的是Dapper,做的时候没有具体看dapper的具体用法,现在回来回顾总结一下. 1-总体介绍dapper 我们都知道ORM全称叫做Object Relationship Mapper, ...

  4. nginx 部署 .net core 获取的客户端ip为127.0.0.1

    采用nginx和.net core 部署一套api接口到服务器上,发现获取到的ip地址为127.0.0.1 经过检查发现,需要在nginx配置上以下参数 proxy_set_header Host $ ...

  5. 「BZOJ 2440」完全平方数「数论分块」

    题意 \(T\)组数据,每次询问第\(k\)个无平方因子的数(\(1\)不算平方因子),\(T\leq 50,k\leq 10^9\) 题解 \(k\)的范围很大,枚举肯定不行,也没什么奇妙性质,于是 ...

  6. position用法

    fixed的用法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. 分层最短路-2018南京网赛L

    大概题意: 题意:N个点,M条带权有向边,求将K条边权值变为0的情况下,从点1到点N的最短路. 拓展:可以改变K条边的权值为x 做法:把每个点拆成k个点,分别表示还能使用多少次机会,构造新图. 实际写 ...

  8. uoj#450. 【集训队作业2018】复读机(单位根反演)

    题面 传送门 题解 我的生成函数和单位根反演的芝士都一塌糊涂啊-- \(d=1\),答案就是\(k^n\)(因为这里\(k\)个复读机互不相同,就是说有标号) \(d=2\),我们考虑复读机的生成函数 ...

  9. Jmeter-响应结果unicode转成中文显示

    本文为转载微信公众号文章,如作者发现后不愿意,请联系我进行删除 原文链接:http://mp.weixin.qq.com/s?__biz=MjM5OTI2MTQ3OA==&mid=265217 ...

  10. 11、OpenCV Python 图像金字塔

    __author__ = "WSX" import cv2 as cv import numpy as np # 高斯金字塔 #金字塔 原理 ==> 高斯模糊+ 降采样 #金 ...