一.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. Emgu cv3.0.0 图像收集

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  2. 624. Maximum Distance in Arrays二重数组中的最大差值距离

    [抄题]: Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers ...

  3. mysql 5.7.11 源码安装

    mysql5.711安装 1.安装boost包下载地址http://sourceforge.net/projects/boost/files/boost/ 2.解压boost_1_59_0.tar.g ...

  4. HDOJ 4802 GPA

    Problem Description In college, a student may take several courses. for each course i, he earns a ce ...

  5. Notepad++一键编译运行(Python、Java、C++)

    Python 需要事先安装Python配置好环境变量.建议使用Anaconda,方便. 在Notepad按F5,输入如下 cmd /k chdir /d $(CURRENT_DIRECTORY) &a ...

  6. C#知识点总结系列:3、C#中Delegate和Event以及它们的区别

    1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁 ...

  7. Vue属性绑定

    v-bind:属性动态绑定数据,简写: v-html:绑定html代码 {{}}:绑定数据,另一种v-text v-bind:class="{‘red’:isActive}"  : ...

  8. 在GridView控件FooterTemplate内添加记录 Ver3

    重构此篇<在GridView控件FooterTemplate内添加记录 Ver2> http://www.cnblogs.com/insus/p/3270644.html 这有些缺陷,怎样 ...

  9. java 乱码问题解决方案

    java  乱码问题解决方案 一.tomcat: <Connector         port="8080"         maxThreads="150&qu ...

  10. Hibernate常见异常总结

    系统配置 1.没有查找到src目录下的hibernate.cfg.xml Exception in thread "main" org.hibernate.HibernateExc ...