首页 > 代码库 > 【HDU】 1018 Big Number
【HDU】 1018 Big Number
大意就是求 :
log10(n!) = log10(1 * 2 * 3 * .......*n) = log10(1) + log10(2) + ........+log10(n);
打表的话会MLE,直接递推就行了,后台数据不会很刁钻。
#include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int maxn = 10000000; //double dp[maxn + 1]; //void List(){ // dp[1] = log10(1.0); // for(int i = 2; i < maxn; i++) // dp[i] = dp[i - 1] + log10(1.0 * i); // return; //} int main(){ int T; //List(); scanf("%d",&T); while(T--){ int n; scanf("%d",&n); double ret = 0; for(int i = 1; i <= n; i++) ret += log10(1.0 * i); printf("%.f\n",ceil(ret)); } return 0; }
还有一种方法,就是斯特林公式
也就是log10(n!) = log(n!) / log(10) = ( n*log(n) - n + 0.5*log(2*π*n))/log(n);
直接公式就出来了,更快捷。
这里就不多说了。
【HDU】 1018 Big Number
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。