一.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. [转]PHP 面试问哪些问题可以比较准确的反映出应聘者的开发水平?

    基础题 场景: 你入职了一家新公司. 上班第一天,接待人给你安排好了座位,然后拉过来一台没拆封的新电脑. 你把电脑连接好之后,按下电源.... 好吧,这真是一台新电脑,里边竟然内置了个DOS系统!! ...

  2. SQl Server Tsql基本编程 ,循环语句 ,存储过程

    一些比较重要但是不一定经常用的 句子 Tsql定义变量 declare @a int :  定义的变量前面必须用@,数据类型是SQL里的数据类型,执行的时候要把需要的有关联的代码一起执行,单独执行一条 ...

  3. Entity Framework Tutorial Basics(19):Change Tracking

    Change Tracking in Entity Framework: Here, you will learn how entity framework tracks changes on ent ...

  4. SDUT 1177 C语言实验——时间间隔

    C语言实验——时间间隔 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 从键 ...

  5. 数组队列C++实现

    template <typename _T>class CArrayQueue {public:    CArrayQueue() {        m_rear = 0;        ...

  6. 第4章 jQuery中的事件和动画

    4.1 jQuery中的事件 4.1.1 加载DOM jQuery就是用 `$(document).ready()方法来代替传统JavaScript的window.onload方法的. 1.执行时机 ...

  7. 多线程学习-基础(四)常用函数说明:sleep-join-yield

    一.常用函数的使用 (1)Thread.sleep(long millis):在指定的毫秒内让当前正在执行的线程休眠(暂停执行),休眠时不会释放当前所持有的对象的锁.(2)join():主线程等待子线 ...

  8. Javascript-DOM笔记

    参考 javascript原生dom操作方法 JavaScript原生的dom操作方法 第一类:节点查找相关方法和属性 document/父节点.getElementById()document/父节 ...

  9. gRPC官方文档(异步基础: C++)

    文章来自gRPC 官方文档中文版 异步基础: C++ 本教程介绍如何使用 C++ 的 gRPC 异步/非阻塞 API 去实现简单的服务器和客户端.假设你已经熟悉实现同步 gRPC 代码,如gRPC 基 ...

  10. 正经学C#_表达式与其运算符[赋值运算符]:《c#入门经典》

    上一节中介绍了算术运算符,算术运算符的优先级. 今天说说赋值运算符,不陌生,=[等号]就是赋值运算符的一种. 除此之外还有好多种的.见下图. 运算符 类别 描述 实例 = 二元 简单的赋值运算符,把右 ...