1. 程式人生 > >Digits of Factorial --計算n!在k進位制下位數

Digits of Factorial --計算n!在k進位制下位數

思路:

利用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。。。知識面不夠啊。