Problem Description:
In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of digits in the factorial of the number.
Input:
Input consists of several lines of integer numbers. The first line contains an integer n, which is the number of cases to be tested, followed by n lines, one integer 1 ≤ n ≤ 107 on each line.
Output:
The output contains the number of digits in the factorial of the integers appearing in the input.
Sample Input:
2
10
20
Sample Output:
7
19
解题思路:
这道题很好理解,就一句话:一个数的位数等于它以10为底取对数再加一。
程序代码:
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main() { int t,n,i; double sum; scanf("%d",&t); while(t--) { sum=0.0; scanf("%d",&n); for(i=2;i<=n;i++) sum+=log10(i); printf("%d\n",(int)sum+1); } return 0; }