1058**(1<=n<=10^6):**

n!的长度等于log10(n!)


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

1130(1<=n<=10^9)

通过斯特林公式优化:

img(e =2.718)

斯特林公式可以用来估算某数的大小,结合lg可以估算某数的位数,或者可以估算某数的阶乘是另一个数的倍数。

#define PI 3.1415926535898

 //这里要长一点
#define e 2.718281828459
int main()
{
    int i,t,j,n;
    double sum;
   scanf("%d",&t);
   for(j=0;j<t;j++)
    {
      scanf("%d",&n);
      sum=0.5*log10(2*PI*n)+n*log10(n/e);
      printf("%lld\n",(long long)sum+1);
    }
    return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

51nod 1384 全排列 Previous
vector用法 Next