rt。
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
inline int pow2(int k, int f) {
int o = 1;
while (f--)
o *= k;
return o;
}
int a[] = {
0, 10, 9, 90,
90,
900,
900,
9000,
9000,
90000,
90000,
900000,
900000,
9000000,
9000000,
90000000,
90000000,
900000000,
900000000,
9000000000,
9000000000,
90000000000,
90000000000,
900000000000,
900000000000,
9000000000000,
9000000000000,
90000000000000,
90000000000000,
900000000000000,
900000000000000,
9000000000000000,
9000000000000000,
90000000000000000,
90000000000000000,
900000000000000000,
900000000000000000,
9000000000000000000
};
signed main() {
int n;
cin >> n;
/*
0
1
2
3
4
5
6
7
8
9
个数:10
11
22
33
44
55
66
77
88
99
个数:9
101
111
121
131
141
151
161
171
181
191
个数:10
...
1001
1111
1221
1331
1441
1551
1661
1771
1881
1991
10个
10001
10101
10201
10301
10401
10501
10601
10701
10801
10901
11111
12121
13131
14141
15151
16161
17171
18181
19191
...
100001
101101
1000001
1001001
1002001
1003001
1004001
1005001
1006001
1007001
1008001
1009001
100
*/
unsigned long long sum = 0;
int i;
for (i = 1; ; i++) {
sum += a[i];
if (sum >= n) {
if (sum == n)
i++;
break;
}
}
sum = n;
for (int j = 1; j < i; j++)
sum -= a[j];
if (i % 2 == 0) {
int c[100];
bool f = 0;
int id2 = 0;
while (i) {
for (int j = 0; j < 10; j++) {
if (!f && j == 0)
continue;
int k = (!f ? j : (j + 1));
int o = pow2((unsigned long long)10, (unsigned long long)ceil((i - 2) / 2.0)) * k;
if (o > sum) {
sum -= pow2((unsigned long long)10, (unsigned long long)ceil((i - 2) / 2.0)) * (k - 1);
c[++id2] = j;
break;
} else if (o == sum) {
sum -= o;
c[++id2] = j;
break;
}
}
i -= 2;
f = 1;
}
string b = "";
for (int j = 1; j <= id2; j++) {
b += to_string(c[j]);
}
for (int j = id2; j >= 1; j--)
b += to_string(c[j]);
cout << b;
} else {
bool f = 0;
int c[100];
int id2 = 0;
while (i > 1) {
for (int j = 0; j < 10; j++) {
if (!f && j == 0)
continue;
int k = (!f ? j : (j + 1));
int o = pow2((unsigned long long)10, (unsigned long long)ceil((i - 2) / 2.0)) * k;
if (o > sum) {
sum -= pow2((unsigned long long)10, (unsigned long long)ceil((i - 2) / 2.0)) * (k - 1);
c[++id2] = j;
break;
} else if (o == sum) {
sum -= o;
c[++id2] = j;
break;
}
}
i -= 2;
f = 1;
}
int k = 0;
if (sum != 0)
for (int j = 0; j < 10; j++) {
sum--;
if (sum == 0) {
k = j;
break;
}
}
string b = "";
for (int j = 1; j <= id2; j++) {
b += to_string(c[j]);
}
b += to_string(k);
for (int j = id2; j >= 1; j--)
b += to_string(c[j]);
cout << b;
}
return 0;
}
WA*3