首页 > 代码库 > 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。