您的位置:首页 > 其它

poj1423解题报告

2014-11-12 20:07 204 查看
Big Number

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 26063Accepted: 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的新手~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: