HDU 1018 Big Number

LINK:HDU 1018  

题意:求n!的位数~

由于n!最后得到的数是十进制,故对于一个十进制数,求其位数可以对该数取其10的对数,最后再加1~

易知:n!=n*(n-1)*(n-2)*......*3*2*1

∴lg(n!)=lg(n)+lg(n-1)+lg(n-2)+......+lg(3)+lg(2)+lg(1);

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int t;
 9     scanf("%d",&t);
10     while(t--)
11     {
12         double i,n,sum;
13         scanf("%lf",&n);
14         for(i=1,sum=0;i<=n;i+=1)
15             sum+=log10(i);
16         printf("%d
",(int)sum+1);
17     }
18     return 0;
19 }

//memory:248KB    time:406ms

原文地址:https://www.cnblogs.com/teilawll/p/3275183.html