首页 > 代码库 > BZOJ 3000 Big Number 数学算法
BZOJ 3000 Big Number 数学算法
题目大意:求n!在k进制下的位数
即
Stirling公式:
数据范围小就暴力,数据范围大套用Stirling公式
注意先利用log来避免数字过大而失精 最后答案要开long long
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const double pi=acos(-1.0),e=exp(1.0); int n,k; int main() { int i; while(~scanf("%d%d",&n,&k) ) { if(n<=100) { double temp=0; for(i=2;i<=n;i++) temp+=log(i); temp/=log(k); cout<<(long long)floor(temp+1e-7)+1ll<<endl; } else { double temp=log(2*pi*n)/log(k)/2+n*log(n/e)/log(k); cout<<(long long)floor(temp+1e-7)+1ll<<endl; } } return 0; }
BZOJ 3000 Big Number 数学算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。