E
进制转换好题。题目要求我们把含有 \(4\) 的数字挖掉。先考虑挖掉的不是 \(4\), 而是 \(9\).那我们要求的就是编号为 \(k\), 仅由 \(0 -- 8\) 组成的数字。这实际上就是求其在九进制下的表达形式。那么在挖去 \(4\) 的时候,类似地,我们就是用 \(0 - 3, 5 - 9\) 共八个数字来表达我们的 \(k\)。所以在转化成 \(9\) 进制以后,大于等于 \(4\) 的数字加一即可。
#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long
template <class T>
inline void read(T& a){
T x = 0, s = 1;
char c = getchar();
while(!isdigit(c)){ if(c == '-') s = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + (c ^ '0'); c = getchar(); }
a = x * s;
return ;
}
int main(){
int T; read(T);
while(T--){
ll n; read(n);
ll tmp = n;
int num = 0;
vector <int> G;
while(tmp > 0){
num++;
G.push_back(tmp % 9);
tmp /= 9;
}
for(int i = G.size() - 1; i >= 0; i--){
if(G[i] >= 4) G[i]++;
printf("%d", G[i]);
}
cout << endl;
}
return 0;
}