p2273.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 37 行

CPP
37
字号
#include <cstdlib>
#include <iostream>

using namespace std;

int   len;
char  Name [500000];
int   Pos [100000];

void  prepare ()
{
 len = 0;
 for ( int i = 1; i < 100000; i ++ ) {
     if ( i > 9999 ) Name [++len] = i / 10000;
     if ( i > 999 ) Name [++len] = i / 1000 % 10;
     if ( i > 99 ) Name [++len] = i / 100 % 10;
     if ( i > 9 ) Name [++len] = i / 10 % 10;
     Name [++len] = i % 10;
     Pos [i] = len;
 }      
}

int     find ( int L , int state = 0 )
{
        if ( L == 1 ) return 1;
        return state & 1 ? find ( L / 2 , state + 1 ) * 2 : find ( ( L + 1 ) / 2 , state + 1 ) * 2 - 1;
}

int main(int argc, char *argv[])
{
    prepare ();
    int     N;
    while ( scanf ( "%d" , &N ) != EOF ) printf ( "%d\n" , Name [find ( Pos [N] )] );
    system("PAUSE");
    return EXIT_SUCCESS;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?