整數串問題

問題:

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


發佈了34 篇原創文章 · 獲贊 25 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章