下面介绍两种方法直接求阶乘结果的位数:
方法一 可以将n!表示成10的次幂,即n!=10^M(10的M次方)则不小于M的最小整数就是 n!的位数,对该式两边取对数,有 M =log10^n!
即: M = log10^1+log10^2+log10^3...+log10^n 循环求和,就能算得M值,该M是n!的精确位数
代码:
#include "iostream"
#include "math.h"
using namespace std;
int main()
{ int n; register int i; long double d; while (scanf("%d",&n)!=EOF) { d=0; for (i=1;i<=n;i++) { d+=(double)log10(i); } printf("%d\n",(int)d+1); } return 0;
}