「题意」:给出定义十进制数的所有数位都是偶数(即0、2、4、6、8)的时候称为 “好整数”,给定一个N,求第N小的 “好整数”。(1<=N<=
1
0
12
10^{12}
1012)
前几个 “好整数” 分别为0、2、4、6、8、20、22、24、26、28…
样例输入:133
样例输出:2024
题目思路:从第一位开始确定,一步步的确定下一位。
举8为例子说明:即寻找第八小的“好整数”。
5*1<8
5*2>8
- 所以第一位数字为2
接下来寻找下一位数字,在寻找下一位数字之前,需要用n减掉之前的数字个数。即n=8-5=3。
1*1<31*2<3
1*3>=3
- 找到第二位数字为4。
输出24
代码实现:
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n, k = 1, c = 0;
cin >> n;
while (k <= n)
{
//确定在第几层。
k *= 5;
c++;
}
for (int i = 1; i <= c; i++)
{
//一位数一位数的确定,每次去掉一层。
k /= 5;
for (int j = 1; j <= 5; j++)
{
if (j * k >= n)
{
//通过(j-1)*2 的0 1 2 3 4映射0 2 4 6 8.
n -= (j - 1) * k;
cout << (j - 1) * 2;
break;
}
}
}
return 0;
}