How many zero's and how many digits ?
大意:
给出一个数字N和进制B,求N!在B进制下,有多少个尾0,有多少位数字;
代码:
#include <stdio.h>
#include <string.h>
#include <cmath>
int flag[1000];
int main(){
int n, b;
while (scanf ("%d %d", &n, &b) != EOF){
double leng = 0;
for (int i = 2; i <= n; i++) {
leng += log10(i);
}
leng = leng / log10(b);
int y = (int)(leng + 0.000001) + 1;
for (int i = 2; i <= n; i++) {
int factor = i;
for (int j = 2; j <= factor && j <= b; j++){
while (factor % j == 0){
flag[j]++;
factor = factor / j;
}
}
}
int zm = 0;
while (1){
int t = b;
for (int j = 2; j <= t; j++){
while (t % j == 0 && flag[j]){
flag[j]--;
t = t / j;
}
}
if (t == 1) {
zm++;
}
else {
break;
}
}
printf ("%d %d\n", zm, y);
memset(flag, 0, sizeof (flag));
}
}