首页 > 其他 > 详细

取对数求阶乘位数——lightoj1045

时间:2019-07-04 13:44:32      阅读:160      评论:0      收藏:0      [点我收藏+]
/*
求 n! 在base进制下的位数 
取对数,用换底公式,预处理对数前缀和 
b^x = n!
x = log_b(n!) 
  = log_10(n!)/log_10(b)
对x向上取整即可 
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
double sum[maxn];
void init(){
    for(int i=1;i<maxn;i++)
        sum[i]=sum[i-1]+log(1.0*i);
}

int main(){
    init();
    int t;cin>>t;
    for(int i=1;i<=t;i++){
        long long n,b;
        cin>>n>>b;
        double ans=sum[n]/log(1.0*b);
        if(n==0)ans=0;
        printf("Case %d: %lld\n",i,(long long)(ans)+1);
    }
} 

 

取对数求阶乘位数——lightoj1045

原文:https://www.cnblogs.com/zsben991126/p/11131496.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!