您的位置:首页 > 其它

hdu 1018 Big Number

2017-07-31 22:17 323 查看
点这里

斯大林公式

n! = sqrt(2*pi*n)*(n/e)^n

将两边去对数

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

得到位数

注意 pi 和 e 的精度

#include <iostream>
#include <cmath>
#include <stdio.h>
#define e 2.718281828459
#define pi 3.1415926
using namespace std;
double f(int s)
{
return 0.5*log10(2*pi*s)+s*log10(s/e);
}
int main()
{ int a,s;
while(~scanf("%d",&a))
{
while(a--)
{

scanf("%d",&s);
printf("%d\n",(int)f(s)+1);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: