// 面试题44:数字序列中某一位的数字
// 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这
// 个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一
// 个函数求任意位对应的数字。 #include <iostream>
#include <algorithm> using namespace std; int countOfIntegers(int digits);
int digitAtIndex(int index, int digits);
int beginNumber(int digits); int digitAtIndex(int index)//查找index位置的值
{
if (index < )//判断无效输入
return -; int digits = ;
while (true)
{
int numbers = countOfIntegers(digits);//digits位的最多个数
if (index < numbers * digits)
return digitAtIndex(index, digits);//若在这个范围内,就开始查找 index -= digits * numbers;//减去digits位的最多个数,在下一个digits+1位范围内查找
digits++;
} return -;
} int countOfIntegers(int digits)//digits位的最多个数
{
if (digits == )
return ; int count = (int)std::pow(, digits - );
return * count;
} int digitAtIndex(int index, int digits)//函数重载,index在digits位内的位置
{
int number = beginNumber(digits) + index / digits;//找到要落在的那个数值
int indexFromRight = digits - index % digits;//计算从右看过位置
for (int i = ; i < indexFromRight; ++i)//这个牛批,这是计算落在的那个字符,注意i=1
number /= ;
return number % ;//要用余数才可以得到
} int beginNumber(int digits)//digits位的初始值
{
if (digits == )
return ; return (int)std::pow(, digits - );
} // ====================测试代码====================
void test(const char* testName, int inputIndex, int expectedOutput)
{
if (digitAtIndex(inputIndex) == expectedOutput)
cout << testName << " passed." << endl;
else
cout << testName << " FAILED." << endl;
} int main()
{
test("Test1", , );
test("Test2", , );
test("Test3", , );
test("Test4", , );
test("Test5", , ); // 数字99的最后一位,9
test("Test6", , ); // 数字100的第一位,1
test("Test7", , ); // 数字370的第一位,3
test("Test8", , ); // 数字370的第二位,7
test("Test9", , ); // 数字370的第三位,0
system("pause");
return ;
}

《剑指offer》第四十四题(数字序列中某一位的数字)的更多相关文章

  1. 剑指Offer(二十八):数组中出现次数超过一半的数字

    剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  2. 《剑指offer》第二十二题(链表中倒数第k个结点)

    // 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, ...

  3. 《剑指offer》第十二题(矩阵中的路径)

    // 面试题:矩阵中的路径 // 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 // 字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右. // 上.下移动 ...

  4. 剑指offer——python【第28题】数组 中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  5. 剑指Offer(三十四):第一个只出现一次的字符

    剑指Offer(三十四):第一个只出现一次的字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  6. 剑指Offer(二十四):二叉树中和为某一值的路径

    剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  7. 剑指Offer(三十五):数组中的逆序对

    剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

  8. 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位

    剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...

  9. 【Offer】[44] 【数字序列中某一位的数字】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 数字以0123456789101112131415..的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是 ...

  10. 《剑指offer》第十四题(剪绳子)

    // 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...

随机推荐

  1. Golang框架beego电影网爬虫小试牛刀

    学习了一段时间golang,又参考课程学习了beego开发网站爬虫,项目的目录结构是: 采集的目标是豆瓣网电影,入口地址是:https://movie.douban.com/subject/19008 ...

  2. 03:git常见报错解决方法

    1.1 git常见报错解决方法 1.warning: LF will be replaced by CRLF in .idea/workspace.xml. 参考博客:https://www.cnbl ...

  3. Codeforces Round #425 (Div. 2) Problem C Strange Radiation (Codeforces 832C) - 二分答案 - 数论

    n people are standing on a coordinate axis in points with positive integer coordinates strictly less ...

  4. EGIT

    https://jingyan.baidu.com/article/64d05a0262f013de55f73bcc.html

  5. Java中Map接口的遍历

    package Test4; import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import ...

  6. C#操作字符串方法总结

    /* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ####### ...

  7. js 根据对象属性对数组进行按字母排序

    $scope.input.sort(compare('ticked','name')); var compare = function(ticked, name){ return function(a ...

  8. Linux电源管理(五)thermal【转】

    本文转载自:https://blog.csdn.net/zhouhuacai/article/details/78172267 版权声明:本文为博主原创文章,未经博主允许不得转载.    https: ...

  9. Ubuntu 18.04 休眠后无法唤醒的解决办法

    解决办法:安装laptop-mode-tools工具包. 1.检查是否安装了grep laptop-mode-tools 工具包 $ dpkg -l | grep laptop-mode-tools ...

  10. POJ 2018 Best Cow Fences(二分最大区间平均数)题解

    题意:给出长度>=f的最大连续区间平均数 思路:二分这个平均数,然后O(n)判断是否可行,再调整l,r.判断方法是,先求出每个数对这个平均数的贡献,再求出长度>=f的最大贡献的区间,如果这 ...