Note:本题直接计算一定会超时,故需要用Stirling公式求其最高位。。。。。。
#include <stdio.h>
#include <math.h>
const double Pi = 3.14159265358979323846;
const double E = 2.71828182845904523536;
const int m[9] = {1,1,2,6,2,1,7,5,4};
int main()
{
int n;
double k;
while(~scanf("%d",&n))
{
if(n <= 8)
{
printf("%d\n",m[n]);
continue;
}
k = log10(2*Pi*n)/2+n*log10(n/E);
printf("%d\n",int(pow(10,k-int(k))));
}
return 0;
}
原创链接:
点击打开链接