首页 > 代码库 > POJ 1423 Big Number

POJ 1423 Big Number

题目链接:http://poj.org/problem?id=1423

 

思路:如果用普通方法做肯定会超时,数据也存不下,只能用数学方法来优化。这里用到了斯特林公式。秒出~~

公式为 n! = log10(sqrt(2*pi*n)) + n * log10(n/e)

这个公式只能求出n!的估算值,这里还需要一个技巧就是log10(X)的结果加1便是X的位数~~~

 

代码:

  

#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>#define e 2.718281828459045#define pi 3.141592653589793239using namespace std;int main (){    int cas,n;    scanf("%d",&cas);    while (cas --)    {          scanf("%d",&n);          double t = log10(sqrt(2*pi*n)) + n * log10(n/e);          printf ("%d\n",(int)t + 1);    }return 0;}