hdu 1018阶乘位数

求N!的位数

因为前几天做了关于大数运算的学习,我也天真的以为这个题目是大数计算,后来才发现N<10^7,大数也没有办法了。

然而,这个题目只是求有多少位
N!=1·2·3·4·5·5·6·7···(n-1)·n
两边求对10的对数
log10(N!)=log(1·2·3·4·5·5·6·7···(n-1)·n)
=log(1)+log(2)+log(3)+···+log(n)
这样求就是了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
#define N 10000000
int main()
{
    int t ;
    scanf("%d",&t);
    while(t--)
    {
        double sum =0 ;//为了保证精度,sum一定不可以是整数
        int n ;
        scanf("%d",&n);
        for(int i = 1 ;i<=n;i++)
        {
            sum+=log10(i*1.0);
        }
        sum++;
        printf("%d\n",(int)sum);
    }
    return 0 ;
}

你可能感兴趣的:(阶乘,log,数学公式)