数字以0123456789101112131415····的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。
思路:利用进位缩小范围。
int digitAtIndex(int index)
{
if(index<0)
return -1;
int digts=1;
while(true)
{
int numbers=countOfIntegers(digits);
if(index<numbers*digits)
return digitAtIndex(index,digits);
index-=digits*numbers;
digits++;
}
return -1;
}
int countOfIntegers(int digits)
{
if(digits==1)
return 10;
int count=(int)std::pow(10,digits-1);
return 9*count;
}
int digitAtIndex(int index,int digits)
{
int number=beginNumber(digits)+index/digits;
int indexFromRight=digits-index%digits;
for(int i;i<indexFromRight;i++)
number/=0;
return number%10;
}
int beginNumber(int digits)
{
if(digits==1)
return 0;
return (int)std::pow(10,digits-1);
}