zoukankan      html  css  js  c++  java
  • 数字序列问题

    57. 数字序列中某一位的数字

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

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

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

    思路:数字按位数分类分别有9,90,900,9000……个数

    class Solution {
    public:
        int digitAtIndex(int n) {
            if(!n) return 0;
            //i表示i位数,s表示i位数的个数,base表示i位数的第一个数
            long long i = 1, s = 9, base = 1;
            //一,判断n是几位数
            while( n > i*s){
                n -= i*s;
                s*= 10;
                base*=10;
                i++;
            }
            //二、确定第n位是哪个数字
            int num = base + (n+i-1)/i - 1; //向上取整
            //三、确定第n位是那个数字的第几位
            int r = n%i == 0? i:n%i;
            //得到那位数字
            for(int j = 0; j < i-r; j++) num/=10;
            return num%10;
        }
    };
  • 相关阅读:
    hdu 2222 Keywords Search
    Meet and Greet
    hdu 4673
    hdu 4768
    hdu 4747 Mex
    uva 1513 Movie collection
    uva 12299 RMQ with Shifts
    uva 11732 strcmp() Anyone?
    uva 1401
    hdu 1251 统计难题
  • 原文地址:https://www.cnblogs.com/Aliencxl/p/12369092.html
Copyright © 2011-2022 走看看