我们知道n!=n*(n-1)*(n-2)*…*2*1。
那么给定一个n,n!是几位数呢。
更困难的,n!的k进制数有多少位呢。
标签:pre 防止 多少 整数 log double inf status center
我们知道n!=n*(n-1)*(n-2)*…*2*1。
那么给定一个n,n!是几位数呢。
更困难的,n!的k进制数有多少位呢。
第一行是一个数T(1≤T≤50000),代表T组测试数据。
每一组测试数据占一行,有两个整数n(0 ≤ n ≤ 10^6),k(2≤k≤1000)。
对于每组测试数据,输出n!k进制数的位数。
2
3 10
3 2
1 3
代码:
N!=1*2*3*4*5*............*N;
lgN!=lg1+lg2+lg3+lg4+lg5+....................+lgN;
(int)(a[n]/log(k))+1 k进制的位数;
1 #include<stdio.h> 2 #include<math.h> 3 double a[1000000+10]; 4 int main() 5 { 6 int t,n,k; 7 int i; 8 double m=0.0; 9 for(i=1;i<=1000000+10;i++) //打表防止超时 10 {m+=log(i); 11 a[i]=m; 12 } 13 scanf("%d",&t); 14 while(t--) 15 {scanf("%d%d",&n,&k); //这个输入输出放在表的后面就不用每次输入都打表了 16 17 18 19 printf("%d\n",(int)(a[n]/log(k))+1); 20 21 } 22 return 0; 23 }
标签:pre 防止 多少 整数 log double inf status center
原文地址:http://www.cnblogs.com/hss-521/p/7271900.html