(斯特林公式)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 }