您的位置:首页 > 其它

HDU 1018 Big Number(阶乘位数计算)

2017-11-24 13:43 363 查看
整数n的位数的计算方法为:log10(n)+1

故n!的位数为log10(n!)+1

 
如果仅仅是求阶乘的位数,用斯特林(Stirling)公式求解

斯特林(Stirling)公式:



n!的位数就是求log10((2*PI*n)^1/2*(n/e)^n)+1
即 1/2*log10(2*PI*n)+n*log10(n/e)+1

这题解决后可以尝试1042 n!



#include<stdio.h>
#include<math.h>
#define PI 3.141592654
#define E 2.71828182846
int l(int n)
{
int s=1;
if(n>3)
s=log10(2*PI*n)/2+n*log10(n/E)+1;
return s;
}

int main(void)
{
int T, m;

scanf("%d", &T);

while (T--) {
scanf("%d", &m);
printf("%d\n", l(m));
}

return 0;
}



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