输入:
每行输入1个正整数n, (0<n<1000 000)
输出:
对于每个n,输出n!的(十进制)位数。
分析:
这道题采用蛮力法。根据定义,直接求解!
所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n;
lg(n!)=lg(2)+......lg(n);
代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//输入一个数字n,请你计算该数的阶乘的十进制数的位数宽度//比如:3!=6, 则宽度为1//样例数据://n=3 输出1//n=32000 输出130271//n=1000000 输出5565709#include <string>#include <iostream>#include <iomanip>#include <stdio.h>#include <cmath>using namespace std;int main(){ long int n; long int i; double sum; while(scanf("%ld", &n)!=EOF) { sum=0.0; for(i=2; i<=n; i++) { sum+=log10(i); } printf("%ld\n", (int)sum+1 ); } return 0;} |
原文:http://www.cnblogs.com/myhlbl/p/4145958.html