Light OJ 1090 - Trailing Zeroes (II)

计算的末尾0的个数,分别计算25的幂,输出小的


#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值