POJ 1423 解题报告

题目如下:

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值