问题:
有一个规律的整数串,按1~n重复排序。例如112123123412345123456.....
输入一个整数N,输出这个位置的整数
分析:
不适合用数组去做。计算总的数宽度,先确定N这个数的最大n,再在n里面去找,输出。
代码:
#include <iostream>
using namespace std;
int GetLen(int X) {//求整数的宽度
int temp = 0;
while (X) {
X = X / 10;
temp++;
}
return temp;
}
int OutChar(int X, int N) {//倒叙输出整数的第几位
int temp;
while (N--) {
temp = X % 10;
X = X / 10;
}
return temp;
}
int main() {
int N, count = 0, SUM = 0, i, j = 0, Temp = 0, var = 0, mark = 0;
cin >> N;
for (i = 1; i <= N; i++) {
count = count + GetLen(i);//计算总宽度
Temp = N - SUM;//还差多少个宽度到N
if (Temp <= count) {//如果这个数的宽度,大于差数,就在这里去找
for (j = 1; j <= i; j++) {
var = var + GetLen(j);
if (Temp - var == 0) {
cout << OutChar(j, 1) << endl;
mark = 1;
break;
}
if (GetLen(j + 1) >= Temp - var) {
cout << OutChar(j + 1, GetLen(j + 1) - (Temp - var) + 1)
<< endl;
mark = 1;
break;
}
}
}
if (mark == 1)//已经输出,退出循环
break;
SUM = SUM + count;
}
return 0;
}