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