• 新增2 数字序列中某一位的数字


    数字按照0123456789101112131415161718192021…的顺序排列。第5位(从0开始计数)为5,第13位为1,第19位为4…… 求任意第n位对应的数字。

    思路:

    • 直观方法做枚举。每枚举一个数字的时候,求出该数字是几位数,并把数字的位数和前面的所有数字的位数相加。当累加的数位大于n时,那么第n位数字一定在这个数字里。
    • 以第15位数字2为例(2隶属与12,两位数,位于12从左侧以0号开始下标为1的位置) 步骤1:首先确定该数字是属于几位数的; 如果是一位数,n<9;如果是两位数,n<9+90*2=189; 说明是两位数。 步骤2:确定该数字属于哪个数。10+(15-10)/2= 12。 步骤3:确定是该数中哪一位。15-10-(12-10)*2 = 1, 所以位于“12”的下标为1的位置,即数字2。 以第1001位数字7为例 步骤1:首先确定该数字是属于几位数的; 如果是一位数,n<9;如果是两位数,n<9+90*2=189;如果是三位数,n<189+900*3=2889; 说明是三位数。 步骤2:确定该数字属于哪个数。100+(1001-190)/3= 370。 步骤3:确定是该数中哪一位。1001-190-(370-100)*3 = 1,所以位于“370”的下标为1的位置,即数字1。

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int core(int num);
    int getSizeOfDigit(int i);
    int getResult(int digit, int num);
    
    int main(){
        int num = 0;
        while (num != -1){
            cout << "type a size" << endl;
            cin >> num;
            int result = core(num);
            cout << result << endl;
        }    
        return 0;
    }
    
    int core(int num){
        if (num < 0)
            return -1;
        int digit = 1;
        while (true){
            int numbers = getSizeOfDigit(digit);
            if (num < numbers * digit)
                return getResult(digit, num);
            num -= digit * numbers;
            ++digit;
        }
    }
    int getSizeOfDigit(int i){
        if (i == 1)
            return 10;
        return 9 * pow(10, i - 1);
    }
    
    int getResult(int digit, int num){
        int beginNum = 0;
        if (digit == 1)
            beginNum = 0;
        else
            beginNum = pow(10, digit - 1);
        int resultNum = beginNum + num / digit;
        int countFromRight = digit - num % digit;
        for (int i = 0; i < countFromRight - 1; ++i)
            resultNum /= 10;
        return resultNum % 10;
        
    }
  • 相关阅读:
    大二(上期)学期末个人学习总结
    《梦断代码》阅读笔记01
    软件工程概论课程评价
    03《构建之法》阅读笔记第三篇(终结篇)
    02《构建之法》阅读笔记第二篇
    个人简评——2345王牌拼音输入法
    《人件集》阅读笔记第一篇
    个人学习进度条
    AcWing ST算法(区间求最值)打卡
    AcWing 101. 最高的牛 (差分) 打卡
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8613204.html
Copyright © 2020-2023  润新知