Codeforces Round 863 (Div. 3)———E

zhujio / 2023-05-03 / 原文

题意:给定一个k,问由012356789组成的数字第k大的是多少

链接:Problem - E - Codeforces

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"

/*
    思路:k代表在2没有出现4的数字中,第k大的数
          十进制表示由“0123456789”这九个数组成的数中第x大的数
          例如13代表由“0123456789”组成的数中(不包括0)第13大的数
          那么这题k代表由"012356789"组成的数中第k大的数
          将k由十进制转换成特殊的九进制(012356789)就是对应的由012356789组成的第k大的数

          例子:求由01组成的第3大的数
                将3转换成二进制那么答案就是11(01 10 11)
*/

int main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int T = 1;
    cin >> T;
    while (T--) {
        ll k;
        cin >> k;
        vector<int>vec;
        while (k) {
            vec.push_back(k % 9);
            k /= 9;
        }
        reverse(vec.begin(), vec.end());
        for (auto i : vec) {
            if (i < 4)cout << i;
            else cout << i + 1;
        }
        cout << endl;
    }
    return 0;
}