2301_77895895 2023-11-09 00:20 采纳率: 66.7%
浏览 8
已结题

求数列上的第k位个数字,如下图所示

求数列上的第k位个数字,如下图所示

img


有没有人可以用c/c++帮忙解答一下?

  • 写回答

3条回答 默认 最新

  • 关注

    1位数的数有9个,2位数的有90个,这样累加,找出长度所在范围,然后精细求数.
    运行结果:

    img

    代码:

    #include <iostream>
    using namespace std;
    int main()
    {
        int ws = 1;
        long long k, s = 0;
        long long start = 10;
        long long t = 90;
        
        cin >> k;
        if (k <= 9)
        {
            cout << k;
            return 0;
        }
        else
        {
            s = 9; //1位数有9个
            ws = 2;
            while (1)
            {
                if (s + t * ws >= k)
                    break;
                else
                {
                    s = s + t * ws;
                    ws++;
                    t *= 10; //2位数字的个数是90个,3位数字的个数是900,以此类推
                    start *= 10;
                }
            }
            if (s + t * ws == k)
            {
                cout << 9;
                return 0;
            }
            for (; ; start++)
            {
                s = s + ws;
                if (s >= k)
                    break;
            }
            if (s == k)
                cout << (start % 10);
            else
            {
                long long p = s - k;
                while (p--)
                    start /= 10;
                cout << (start % 10);
            }
        }
    
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月9日