题目描述:
数字以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);
}