题意:如题目.

方法一:<TLE>
* 可设想n!的结果是不大于10的M次幂的数,即n!<=10^M(10的M次方),则不小于M的最小整数就是 n!的位数,对
* 该式两边取对数,有 M =log10^n! 即:M = log10^1+log10^2+log10^3...+log10^n 循环求和,就能算得M值,
* 该M是n!的精确位数。当n比较大的时候,这种方法方法需要花费很多的时间。
*
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main ()
{
int n;
double sum;
while(scanf("%d",&n)!=EOF)
{
sum=1;
for(int i=2;i<=n;i++)
sum+=log10(i);
printf("%d\n",(int)sum);
}
return 0;
}
*    方法二:
* 利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:
* res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );
* 当n=1的时候,上面的公式不适用,所以要单独处理n=1的情况!

#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<string>

#include<algorithm>

#include<cmath>

#include<vector>

#include<stack>

#include<map>

#include<queue>

#include<iostream>

using namespace std;

typedef long long ll;

int main ()

{

ll n;

double ans;

while(~scanf("%lld",&n))

{

ans=1;

if(n!=1&&n!=0)

ans=double( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0))))+1);

// ans=floor ((log(sqrt(2*n*pi))+n*log((double)n)-n)/log(10.0))+1;

printf("%lld\n",(ll)ans);

}

return 0;

}

//exp(x) #include<cmath>:求e^x.

计算n!的位数<Math>的更多相关文章

  1. JAVA计算整数的位数

    /** * 计算整数的位数 * @param x * @return */ public static int countIntegerLength(int x){ final int [] size ...

  2. nyoj 69-数的长度 (log10(),计算数的位数)

    69-数的长度 内存限制:64MB 时间限制:3000ms 特判: No 通过数:10 提交数:13 难度:1 题目描述: N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)····· ...

  3. shell脚本通过子网掩码计算出掩码位数

    子网掩码格式为255.255.255.0可以通过以下脚本计算掩码位数 #!/bin/sh #maskdigits.sh mask maskdigits () { a=$(echo "$1&q ...

  4. JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别

    Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...

  5. 素数个数的位数<Math>

    小明是一个聪明的孩子,对数论有着很浓烈的兴趣.他发现求1到正整数10^n (10的n次方)之间有多少个素数是一个很难的问题,该问题的难点在于决定于10^n 值的大小. 告诉你n的值,并且用ans表示小 ...

  6. 计算pi的位数

    from random import random from math import sqrt from time import clock DARTS=1000000 hits=0.0 clock( ...

  7. 51nod 计算N!的位数

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1130 对于这类问题:斯特林近似公式:     百度百科的证明:http: ...

  8. C 计算数字的位数循环

    #include <stdio.h> int main(int argc, char **argv) { // int x; int n=0; scanf("%d",& ...

  9. MT2018笔试题之计算数字位数

    一.计算数字位数 1.题目 给定一个数字T,计算从1到T的所有正整数的位数和.比如T=13,则12345678910111213有17位数字. 输入描述 3 13 4 5 输出 17 4 5 2.思路 ...

随机推荐

  1. Chapter 2 Open Book——9

    When I was finished with that, I took my book bag upstairs. Before starting my homework, I changed i ...

  2. shell脚本中$

    变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid ./package/kernel/mac80211 ...

  3. Ansible10:Playbook的角色与包含【转】

    当单个playbook文件越来越大的时候,我们就需要重新来组织Playbooks了.我们可以将一个大的playbook拆成若干个小的playbook文件,然后通过include的方式,在主配置文件中将 ...

  4. HDU 5963 博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=5963 题目大意:中文题 思路:看ICPC camp好了,简单易懂:https://async.icpc-camp ...

  5. ubuntu 设置vpn

    百度了资料 http://jingyan.baidu.com/article/fa4125aca7f1b628ad709271.html 1. 设置 VPN CONNECTION 2.configur ...

  6. python socketserver实现客户端多并发

    直接看代码 server #!/usr/bin/env python # -*- coding:utf-8 -*- import socketserver import subprocess clas ...

  7. 点击按钮颜色变深.通过ColorFilter ColorMatrix

    private ImageButton imgeBtn; // 颜色矩阵 public final float[] BT_SELECTED = new float[] { 1, 0, 0, 0, -5 ...

  8. sql 比较2个test字段的值

    可以用 CAST([TEXT字段]AS VARCHAR(MAX)),然后再比较

  9. 关于项目刚才还能运行的,重启Myeclipse就不能运行(报错)的解决方法

    这个是以为内存不足引起的,就是打开MyEclipse的时候,因为内存不足,没有加载完整的项目,这个时候需要重启电脑,即可解决问题.

  10. js的各种错误类型

    1.SyntaxError(语法错误) 解析代码时发生的语法错误 eg:var 1a; Uncaught SyntaxError: Unexpected number 2.ReferenceError ...