hdu1018 big number

来源:互联网 发布:楼盘销售软件 编辑:程序博客网 时间:2024/05/18 00:44

强大的数学

题目要求很简单求n的阶乘的位数

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1018

首先是暴力求解 时间951ms差点没过。。

求数字n的位数 log10(n);

用的数学公式N!的位数=log10(N!)=log10(1)+log10(2)+...+log(N);

代码如下

#include <stdio.h>#include <math.h>int fun(int n){    double sum=0; //log10求出了小数所以用double    for(int i=1;i<=n;i++)    {        sum+=log10(i);    }    return (int)sum+1;}int main(){    int t;    int n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        printf("%d\n",fun(n));    }}
但是差点超时

然后还有一位伟大的数学家发明的公式斯特林数

log10(n!)=1.0/2*log10(2*pi*n)+n*log10(n/e)

代码如下

#include <stdio.h>#include <math.h>#define e 2.71828182#define pi 3.1415926int main(){    int t;    int n;    double stl;//斯特林数    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        stl=(1.0/2*log10(2*pi*n)+n*log10(n/e));        printf("%d\n",(int)stl+1);    }}

0 0