面试题:数字序列中某一位的数字
2018-02-01 16:18
176 查看
数字以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);
}
思路:利用进位缩小范围。
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);
}
相关文章推荐
- 剑指Offer(第二版)面试题44:数字序列中某一位的数字
- 剑指offer 面试题41 递增数组中和为s的两个数字 | 和为s的连续整数序列
- 面试题41:和为S的两个数字和为S的连续整数序列
- 面试题41:和为s的两个数字,和为s的连续正数序列
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列
- 《剑指Offer》学习笔记--面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer之面试题41和为s的两个数字VS和为s的连续正数序列
- 面试题41:和为s的两个数字 VS 和为s的连续正整数序列
- 剑指offer面试题 和为s的两个数字 VS 和为s的连续正数序列
- 面试题41:和为s的两个数字 || 和为s的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer 面试题41—和为s的两个数字VS和为s的连续正数序列
- 数字序列中的某一位的数字
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer 面试题41 和为 s 的两个数字 VS 和为 s 的连续正数序列
- 【面试题041】和为s的两个数字VS和为s的连续正数序列
- 面试题21:包含min函数的栈,面试题22:判断某一序列是否是出栈序列
- (简单模拟2.4.1)POJ 2000 Gold Coins(确定大数字序列中的某一位置在小数字序列中的位置)
- 顺时针打印矩阵+栈的压入、弹出序列+树的层序遍历(非递归)+二叉树中和为某一值的路径+数组中只出现一次的数字