(安全プランを証明する)番号のビット列のACWING57。桁

0123456789101112131415 ...文字列の配列へのデジタルフォーマットインチ

この配列では、(0から数えて)5ビット5であり、13ビットは4ビットは次のように19であり、かつ、1です。

任意のビットのデジタルを求めて、対応する関数を記述してください。

サンプル
入力:13

出力:1

アイデア:
最初の数字が何であるかを決定し、その後、図は、いくつかの最初のものであるかを決定。

class Solution {
public:
    typedef long long ll;
    ll get(ll x,ll y) {
        ll tot = 0,cnt[10];
        memset(cnt,0,sizeof(cnt));
        while(x) {
            cnt[++tot] = x % 10;
            x /= 10;
        }
        return cnt[tot + 1 - y];
    }

    int digitAtIndex(int n) {
        ll num[] = {0,9,90,900,9000,90000,900000,9000000,90000000,900000000};
        ll i;
        ll now = 0;
        for(i = 1;i <= 10;i++) {
            if(n > i * num[i]) n -= i * num[i];
            else break;
            now += num[i];
        }
        if(n % i == 0) {
            now += n / i;
            ll x = now,y = i;
            return get(x,y);
        }
        else {
            now += n / i + 1;
            ll x = now,y = n % i;
            return get(x,y);
        }
    }
};

公開された844元の記事 ウォン称賛28 ビュー40000 +

おすすめ

転載: blog.csdn.net/tomjobs/article/details/104960183