Digits of Factorial --計算n!在k進位制下位數
阿新 • • 發佈:2018-12-16
思路:
利用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。。。知識面不夠啊。