劍指Offer(牛客版)--面試題44: 數字序列中的某一位數

題目描述:

 

數字以0123456789101112131415…的格式序列化到一個字符序列中。在這個序列中,第5位(從0開始計數)是5,第13位是1,第19位是4,等等。請寫一個函數求任意位對應的數字。

 

分析:

 

 

完整代碼:

 

int digitAtIndex(int index)
{
	//檢查輸入的合法性
	if(n < 0)
		return -1;
	
	//聲明一個變量,表示數字的位數
	int digits = 1;
	//循環計算
	while(true)
	{
		//計算 digits 位數的總個數 Numbers
		int Numbers = CountofInters(digits);
		//如果 index < digits位數的總位數
		if(index < digits*Numbers)
			//計算出第 index 位對應的數字
			return DigitAtIndex(index, digits);
		else
			index -= digits*Numbers;
		    digits++;	
	}
	return -1;
}

//計算 digits 位數的總個數
int CountofInters(int digits)
{
	//如果 digits 是一位數
	if(digits == 1)
		return 10;
	int number = pow(10, digits - 1);
	return 9*number;
}

//計算出第 index 位對應的數字
int DigitAtIndex(int index, int digits)
{
	//計算 index 位對應的數
	int value = beginnumber(digits) + index/digits;
	//計算出第 index 位 digits 位數的第幾位(從右到左)
	int endofIndex = digits - index%digits;
	//計算出第 index 位對應的數字
	for(int i = 0; i < endofIndex; ++i)
		number /= 10;
	
	return number % 10;		
	
}

//計算 digits位數的第一個數
int beginnumber(int digits)
{
	//如果 digits 是一位數
	if(digits == 1)
		return 0;
	return (int)pow(10, digits - 1);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章