Yukicoder047 ポケットを叩くとビスケットが2倍

問題概要

Saraは、「ふしぎなポケット」を手に入れた。
「ふしぎなポケット」は、いくつかビスケットを入れて叩くと、入れたビスケットの数が2倍になる。
Saraは最初1枚のビスケットを持っていて、「ふしぎなポケット」を使ってちょうど$N$枚のビスケットにして、全部食べたいと思っている。
(食べきれないので枚数をオーバーしてはいけない)
この時、ちょうど$N$枚にするには、Saraは最低何回ポケットを叩く必要があるか求めてください。

$N\leqq10^8$

yukicoder047

解法

$2^k+a$のようにして、任意の数を作れるので、$N≦2^x$となるような最小の$x$を出力すれば良い。

計算量:$O(logN)$

ソース

    #include <bits/stdc++.h>
    using namespace std;
    
    using VS = vector<string>;    using LL = long long;
    
    LL N;
    LL ans = 0LL;
    
    int main() {
        cin.tie(0);
        ios_base::sync_with_stdio(false);
    
        cin >> N;
        int s = 1;
        while (N > s) {
            s *= 2;
            ans++;
        }
        cout << ans << "\n";
    
        return 0;
    }
Share Comments
̃Gg[͂ĂȃubN}[Nɒlj
comments powered by Disqus