Big Number
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 955 Accepted Submission(s): 643
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 ≤ 10
7 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
Source
Asia 2002, Dhaka (Bengal)
Recommend
JGShining
第一个代码,就是求n!算出阶乘的位数,要求出位数,取完对数后最后要+1;
第二个代码,运用stirling公式求解n!;
第二个代码,运用stirling公式求解n!;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,a;
cin>>n;
while(n--)
{
cin>>a;
double sum=0;
for(int i=1;i<=a;i++)
{
sum+=log10(i);
}
cout<<(int)(sum)+1<<endl;
}
return 0;
}
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double PI=acos(double(-1));//获取PI的值,对-1取反余弦函数。
double e=exp(double(1));//获取自然底数e的值
//运用stirling公式,求取n!的值。
int T,a;
cin>>T;
double ans;
while(T--)
{
ans=0;
cin>>a;
ans+=0.5*log10(2.0*a*PI)+a*(log10((double)a)-log10(e));
cout<<(int)ans+1<<endl;
}
return 0;
}