剑指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);
}

猜你喜欢

转载自blog.csdn.net/weixin_41923658/article/details/95324528