题目如下:
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
这一题主要是关于斯特林公式的考察
求指数函数时 形式 double exp(double x) 如 e = exp(1.0)
求以10为底的对数 形式 double log10(double x)
求以e为底的对数 形式 double log(double x)
求反三角函数 形式 double asin(double value) 其余类似
求三角函数值 形式 double sin(double angle) 其余类似
求tan反三角函数值 形式 double atan(double x, double y)
关于类型转化 double s;
int x;
int y;
x = s + 1;
y = (int)s + 1;
其中 x与y不一定相等
原因: int型数据与double类型数据在计算机中存储方式不同 没有进行强制类型转化将可能导致转换出现自己意料之外的结果
解题代码:
# include <stdio.h>
# include <math.h>
int main(void)
{
long int i;
long int testnum;
long int num[1000000];
long double lognum;
long int result;
long int j;
double e;
scanf("%ld", &testnum);
e = exp(1.0);
for(i = 0; i <= testnum - 1; ++i)
{
scanf("%ld", &num[i]);
result = (int)(0.5 * log10(2 * acos(-1.0) * num[i]) + num[i] * log10(num[i] / e)) + 1;
printf("%ld\n", result);
}
return 0;
}
|
POJ 1423 解题报告
最新推荐文章于 2019-10-13 15:43:43 发布