斯特林公式(Stirling):
对右端取以10为的对数再加1就是n!的位数:
位数=(lg2πn)/2+nlg(n/e)+1
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#define e 2.7182818
#define pi 3.14159
using namespace std;
int main()
{
int n;
double x;
cin >> n;
x = int(log10(2 * pi*n) / 2 + n*log10(n / e))+1;
printf("%d", int(x));
}
hdu1018题可用此法求解
图片转载自(代码仓库)[https://github.com/LzyRapx] QAQ https://blog.csdn.net/liangzhaoyang1/article/details/511458