UVa 1185 - Big Number (数学)

题意

求一个阶乘有几位数。

思路

每个数可以表示成$num = a*10^n$

取对数

$log(num) = log(a * 10^n) = log(a) + n$

$log(a)$部分显然小于1,所以只需把所有的数log加一遍最后加一就是答案。

代码

int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int n;
        scanf("%d", &n);
        double sum = 0;
        for (int i = 1; i <= n; i++) sum += log10(i);
        printf("%d\n", (int)(sum + 1));
    }
    return 0;
}

Powered by Jekyll and Theme by solid