https://www.nowcoder.net/acm/contest/75/A
本题中求n!在八进制下的位数,也即求1*2*…*(n-1)*n在八进制下的位数。也即求(int)log8()+1。通过对数的性质,也即求+1,也即求+1。
本人是极其不想用斯特莱公式的,因为本人不能保证以后不带板的比赛中能记得这个繁琐的公式。
#include<stdio.h>
#include<math.h>
#define ll long long
int maxx;
double res,log8=log(8);
int ans[10000005]={1};
int n[1000000];
void f()
{
for(int i=1;i<=maxx;i++)
{
res+=log(i);
if(ans[i]) ans[i]=(int)(res/log8)+1;
}
}
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
scanf("%d",n+i);
ans[n[i]]=1;
if(n[i]>maxx) maxx=n[i];
}
f();
for(int i=0;i<t;i++)
printf("%d\n",ans[n[i]]);
return 0;
}