(斯特林公式)51NOD 1058 N的阶乘的长度

输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。
 
Input
输入N(1 <= N <= 10^6)
Output
输出N的阶乘的长度
Input示例
6
Output示例
3
解:
解法一:
  上一篇刚讲了斯特林公式(x!=sqrt(2*Pi*n)*(n/e)^n),这里就用到了。
  x的位数计算公式:len=log10(x)+1;
  代入斯特林公式并化简指数得:len=0.5*log10(2*Pi*n)+n*log10(n/4);
  如下:
 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 #define Pi acos(-1.0)
 5 #define e  2.718281828459
 6 
 7 int main()
 8 {
 9     int n;
10     while (scanf_s("%d", &n) != EOF)
11     {
12         int len = 0.5 * log10(2 * Pi * n) + n * log10(n / e) + 1;
13         printf("%d\n", len);
14     }
15     return 0;
16 }

 解法二:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int n, i;
 6     double ans = 0;
 7     while(scanf_s("%d", &n)!=EOF)
 8     { 
 9         for (i = 1; i <= n; i++)
10             ans = ans + log10(i);
11         printf("%d\n", (int)ans + 1);
12     }
13     return 0;
14 }

 

posted @ 2018-09-14 16:01  Ekalos  阅读(221)  评论(0编辑  收藏  举报