美文网首页
【剑指 offer】数字序列中某一位的数字

【剑指 offer】数字序列中某一位的数字

作者: 邓泽军_3679 | 来源:发表于2019-05-03 17:26 被阅读0次

1、题目描述

数字以0123456789101112131415…的格式序列化到一个字符序列中。

在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数求任意位对应的数字。

样例

输入:13
输出:1

2、问题描述:

3、问题关键:

  • 根据1位2位。。。数的个数,先找到是哪个数,再判断是哪个数的第几位。

4、C++代码:

class Solution {
public:
    int digitAtIndex(int n) {
         long long i = 1, s = 9, base = 1;//i表示是几位数,s表示位数共有多少个,base表示位数的起始值。
         while(n > i * s) {   // 9, 90, 900, 9000, 90000, i * s表示位数总共占多少位。
             n -= i * s;         // 1000 - 9 - 90 * 2 - 900 * 3 ,当i= 3 时不符合条件,说明是在三位数里面。
             i ++;                
             s *= 10;
             base *= 10;
         }
         int number = base + (n + i - 1) / i - 1; //求位数的第几个数, 1000 - 9 - 180 = n , n / 3 + base - 1(考虑0故减1), 向上取整 n + i - 1。
         int r = n % i ? n % i : i;              // 除不尽就是第几位,除尽力了就是最后一位。
         for (int j = 0; j < i - r; j ++) number /= 10; //求数的第i - r位,取出第i - r位。

         return number % 10;
    }
};

相关文章

网友评论

      本文标题:【剑指 offer】数字序列中某一位的数字

      本文链接:https://www.haomeiwen.com/subject/nxrznqtx.html