zoukankan      html  css  js  c++  java
  • 4.26腾讯笔试题

    共5题,其中某一题如下

    题目:设设 n! 末尾0个个数为Q,现给出Q,求满足条件的最小正整数n($1 leq Q leq 10^{18}$)

    分析:

    给出n求 n! 末尾0的个数,有规律:

    ll func(ll n)
    {
        ll res = 0;
        while(n >= 5)
        {
            n /= 5;
            res += n;
        }
        return res;
    }

    而且,Q关于n是单调的,即n越大,Q越大或不变,所以可以用二分。

    注意,可能n不存在,例如Q=11。因为遇到50,500这种一次增加了多个0。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    typedef long long ll;
    ll x;
    
    ll func(ll n)
    {
        ll res = 0;
        while (n >= 5)
        {
            n /= 5;
            res += n;
        }
        return res;
    }
    
    void solve()
    {
        ll l = 1, r = 1e18, mid;
        while (l < r)
        {
            mid = (l + r) >> 1;
            ll tmp = func(mid);
            if (tmp < x)  l = mid + 1;
            else if (tmp >= x)  r = mid;
        }
        if (func(r) != x)  cout << "No solution" << endl;   // check一次
        else  cout << r << endl;
    }
    
    int main()
    {
        int T;
        cin >> T;
        while (T--)
        {
            cin >> x;
            solve();
        }
        return 0;
    }
  • 相关阅读:
    KMP算法
    找出第二大的数
    webpack 3 优化
    CocoaPods安装
    自适应水平垂直居中
    找出两个数组中都有,并且重复次数最多的元素
    swift 笔记
    Promise 用es5的基础实现
    $.ajax仿axios封装
    js基础拖拽效果
  • 原文地址:https://www.cnblogs.com/lfri/p/12786236.html
Copyright © 2011-2022 走看看