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);
}
}
};