Big Number
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 26063 | Accepted: 8323 |
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 <= m <= 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
题目的大体意思就是,让你求一个数的阶乘有多少位数,输入格式第一个数代表你要输入几个数,然后接下来的数是你要求解的数。源代码:
#include<iostream> #include<cmath> using namespace std; void fun(); int num[10000001]; int main() { int n,i,s; fun(); cin>>n; while (n>=1) { cin>>s; cout<<num[s]<<endl; n--; } return 0; } void fun() { int i; double t=0; for (i=1;i<10000001;i++) { t+=log10((double)i); num[i]=(int)t+1; } }
我这种方法属于暴力方法,题目给出所有的数不超过10的7次方,我就把10的7次方以内所有的数用log10的方法全部算出来他们的位数,存到一个10的7次方的数组里,你输入什么数就对应的数组的什么位置,可以快速的得到你要的位数,我看网上有一种用公式的算法,我这种公式渣看到什么pi的就果断放弃了,虽然我的方法耗时间长,空间大,但是简单粗暴,适合我们这些acm的新手~