问题描述: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 ≤ 10^7 on each line.
输入包括若干行数字。第一行包括一个整数n,n是测试用的样例数,其后跟随着n行。数字的范围是1 ≤ n ≤ 10^7。
Output:The output contains the number of digits in the factorial of the integers appearing in the input.
输出包括输入中出现的数字阶乘的位数。
一个数字的位数=(int)log10(A)+1
因此一个很大的数N的阶乘=1*2*……*N的位数为(int)log10(1*2*……*N)+1=(int)lg(1)+lg(2)+……+lg(N)+1
原问题分解为求1到N的以10为底的对数再+1
这里注意:求对数和的数据类型要设为double,不然都会置0
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
cin>>n;
for(int j=0;j<n;j++)
{
int A;
cin>>A;
double sum = 0;
for(int i=1;i<=A;i++)
{
sum+=log10(i);
}
++sum;
cout<<(int)sum<<endl;
}
return 0;
}