LINK

UVA1185
luogu remote judge UVA1185

思路

我们考虑用log解决。
$log{10}ab=log{10}a+log{10}b$
因此$log
{10}n!=log{10}1+log{10}2+……+log{10}n$
$floor(log
{10}n!)+1$即为$n!$的位数。

代码

#include<bits/stdc++.h>
using namespace std;
#define Re register
#define MAXN 10000005
#define LD long double

int f[MAXN];
LD c;
int n, t;

int main(){
    for ( int i = 1; i <= 10000000; ++i ){
        c += log10(i);
        f[i] = (int)floor(c) + 1;
    }
    scanf( "%d", &n );
    while( n-- ){
        scanf( "%d", &t );
        printf( "%d\n", f[t] );
    }
    return 0;
}

louhc