计算的末尾0的个数,分别计算2和5的幂,输出小的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <math.h>
#include <map>
#include <algorithm>
using namespace std;
int fac(int x , int y){//x!的y因子的个数
int s = 0 ;
while(x){
s += x/y ;
x /= y ;
}
return s ;
}
int C(int x , int y , int n){
int s = 0 ;
s += fac(x , n) ;
s -= fac(x-y , n) ;
s -= fac(y , n) ;
return s ;
}
int main(){
int t;
int n,r,p,q;
scanf("%d",&t);
for(int cas = 1;cas <= t;cas++){
int t_num = 0,f_num = 0;
scanf("%d%d%d%d",&n,&r,&p,&q);
t_num = C(n,r,2);
f_num = C(n,r,5);
//printf("%d %d\n",t_num,f_num);
int n1 = 0,n2 = 0;
while(p%2 == 0){
n1++;
p /= 2;
}
while(p%5 == 0){
n2++;
p /= 5;
}
t_num += n1*q;
f_num += n2*q;
printf("Case %d: %d\n",cas,min(t_num, f_num));
}
return 0;
}