题意:
定义愉悦的数为:只由5和6构成。将所有愉悦的数从小到大排序,求第k个。
把5当成0,把6当成1。
先找第k个数的长度是多少,然后再看是第几个数。
#include <cstdio>
typedef long long LL;
const int maxd = 52;
LL n, pos[maxd], bin[maxd];
int main() {
pos[0] = 1; bin[0] = 1;
for(int i = 1; i < maxd; i++)
pos[i] = (pos[i - 1] << 1) + 1, bin[i] = bin[i - 1] << 1;
int T; scanf("%d", &T);
while(T--) {
scanf("%lld", &n);
int len;
for(len = maxd - 1; len >= 0; len--) if(n >= pos[len]) break;
LL k = n - pos[len];
for(int i = len; i >= 0; i--) printf((k & bin[i]) ? "6" : "5");
printf("\n");
}
return 0;
}