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

简介:

1:把n!写成10^m次方的形式,如果m=2,就说明是三位数。

【维基百科】

【别处摘来的】可以将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小整数就是
    n!的位数,对该式两边取对数,有M=log10^n!即:
    M = log10^1+log10^2+log10^3...+log10^n
    循环求和,就能算得M值

,该M是n!的精确位数。

Problem : 1018 ( Big Number )     Judge Status : Accepted
RunId : 6013028    Language : C    Author : qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
复制代码
 1 #include <stdio.h>
 2 #include <math.h>
 3 int main()
 4 {
 5     int n,cas,i;
 6     double sum;
 7     scanf("%d",&cas);
 8     while (cas--)
 9     {
10         scanf("%d",&n);
11         sum=1;
12         for(i=1;i<=n;i++)    sum+=log10((double)i);
13         printf("%d\n",(int)sum);
14     }
15     return 0;
16 }
复制代码

2:斯特林公式的应用【没用这个,代码是别人的】

由斯特林[striling]公式可得:lnN!=NlnN-N+0.5ln(2N*pi)

而N的阶乘的位数等于:log10(N!)取整后加1

log10(N!)=lnN!/ln(10) 所以len=lnN!/ln(10)+1

复制代码
 1 #include<iostream>
 2 #include<cmath>
 3 const double PI=3.14159265;
 4 using namespace std;
 5 int main()
 6 {
 7     int t,n;
 8     double sum;
 9     cin>>t;
10     while(t--)
11     {   
12         cin>>n;
13         sum=(n*log(n) - n + 0.5*log(2*n*PI))/log(10)+1;
14         printf("%d/n",(int)sum);   
15     }
16     return 0;
17 }
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/28/2522786.html,如需转载请自行联系原作者

相关文章
HDOJ(HDU) 2113 Secret Number(遍历数字位数的每个数字)
HDOJ(HDU) 2113 Secret Number(遍历数字位数的每个数字)
121 0
|
Java
HDOJ 1018 Big Number(大数位数公式)
HDOJ 1018 Big Number(大数位数公式)
116 0
|
前端开发
HDOJ 1212 Big Number
HDOJ 1212 Big Number
112 0
|
机器学习/深度学习
POJ 1423 Big Number
POJ 1423 Big Number
103 0
|
机器学习/深度学习 人工智能
POJ 1423 Big Number
Description In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc.
771 0
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
104 1