思路:
利用log求位数。。。以前做过一个比较a的b次方和c的d次方的大小的题,就是利用log统一底数在比较。
f[n]在k进制下的位数,即logk(f[n])=log10(f[n])/log10[k],打个1e6的表,表示10进制下f[n]的位数,即log10(f[n]),然后结果向上取整就行了,当n=0的时候加个特判。
ceil()函数 #include<cmath>,或<cmath.h> 使用时注意该函数的返回类型
用 法: double ceil(double x);
功 能: 返回大于或者等于指定表达式的最小整数
头文件:math.h
说明:
float ceil ( float value )
返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
#include <iostream>
#include<cmath>
using namespace std;
int t,n,top;
double a[1000006],k;
int main()
{
cin>>t;
a[0]=log10(1);
for(int i=1; i<=1000000; i++)
a[i]=a[i-1]+log10(i);
while(t--)
{
cin>>n>>k;
cout<<"Case "<<++top<<": ";
if(n==0)
{
cout<<1<<endl;
continue;
}
int sum=ceil(a[n]/log10(k));
cout<<sum<<endl;
}
return 0;
}
本以为巨难的一个题,没想到这么easy。。。知识面不够啊。