首页 > 其他 > 详细

数字序列中某一位的数字

时间:2020-05-02 00:08:33      阅读:72      评论:0      收藏:0      [点我收藏+]

原题:

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

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

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

样例

输入:13

输出:1

分析:

 分为3步:第一步:判断是第n位所在的数字num有几位数
         数字为1位的有10个数,从0到9。数字为2位的为90个数,从10到99。数字为3位的为900个数,从100到999。
      第二步:判断n是num的第几位
      第三步:取出n位数
class Solution {
public:
    int digitAtIndex(int n) {
        //1.判断第n所在的数组num有几位数
        long long i = 1;//i表示几位数
        long long base = 1;//base表示不同位数的起始值
        long long s = 9;//s表示当前位数数字的个数 s的值为9,90,900,9000,。
        //一位数有10个数,可以单独处理,第几位数的十足就为几。
        if(n <= s) return n;
       //s*i为数字位数为i的所有数字的位数。 一位数的总位数为9*1,两位数的总位数为90*2,三位数的总位数为900*3.
        while(n > s * i){
           //n每次减去数字位数为i的所有数字的位数
            n = n - s * i;
            //数组位数加1
            i ++;
            //数字位数为i+1的数字有s*10个。
            s = s * 10;
           //数字位数为i+1的第一个数为base*10
            base = base * 10;
        }
        //求数字位数为n的数字为多少,以10为例,base =10 ,n = 1,i =2,如果直接按n/i来计算的话,1/2为0,所以要上取整为(n+1)/i.
        int num = base + (n + 1)/ i - 1;
        int num_index = n % i;
        
        // 取出第n个数字
        for(int j = 0;j < i - num_index ;j++){
            num = num / 10;
        }
        return num % 10;
    }
};

数字序列中某一位的数字

原文:https://www.cnblogs.com/huoguonaicha/p/12815451.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!