LightOJ - 1138 Trailing Zeroes (III) N!中包含因子x的个数

题意:

问是否存在N,其阶乘结果尾是否恰好有n个0;

思路:

很容易想到,就是要找n的阶乘含有因子10的个数,也就是找因子 2, 5 的个数,又因为 2 的个数多于 5,我们只需要查找5的个数就好了

这里包含了 求n的阶乘含有因子5的个数 的方法


#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1000 + 7, maxd = 400000015, mod = 1e9 + 7;
const int INF = 0x7f7f7f7f;


int num(int x) {
    int res = 0;
    while(x) {
        res += (x / 5);
        x /= 5;
    }
    return res;
}

int main() {
    int T;
    scanf("%d", &T);
    for(int tt = 1; tt <= T; ++tt) {
        int n; scanf("%d", &n);
        int l_ = 5, r_ = maxd;
        int ans = -1;
        while(l_ <= r_) {
            int mid = (l_ + r_) / 2;
            int t = num(mid);
            if(t == n) { ans = mid; r_ = mid - 1; }
            else if(t < n) {
                l_ = mid + 1;
            }
            else {
                r_ = mid - 1;
            }
        }
        if(ans != -1) printf("Case %d: %d\n", tt, ans);
        else printf("Case %d: impossible\n", tt);
        //printf("%d\n", num(n));
    }

    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值