题目链接:
FZU: -> Link <-
NYOJ
无意在FZU上看到这道题,以前在NYOJ上做过不过又忘了怎么做了;
网上找找才记起来这个斯特林大数公式;log(n!)=log10(sqrt(2*pi*n))+n*log10(n/e)+1;
log(n!)=log10(n)+log10(n-1)+...+log10(1)+1;
第一种代码:
#include<bits/stdc++.h> #define e 2.718281828459045 #define pi 3.141592653589793239 using 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; }
第二种代码:
int main() { int n; while(~scanf("%d",&n)) { double sum=0; for(int i=1;i<=n;i++) sum+=log(i)/log(10);//logX(Y)=log(X)/log(Y); printf("%d\n",int(sum)+1); } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。