問題:
有一個規律的整數串,按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;
}