いももちのきもち

悪戦苦闘の歴史のメモ

ある自然数以下で最も近い2の累乗(の指数)を求める

例. n = 35 → 32 (2の5乗) 答え: 5

解法1

2^m <= n < 2^(m+1)となるようなmを求める。

double n = 35d;
double m = 0d;
while (!(Math.pow(2, m) <= n && n < Math.pow(2, m + 1))){
    m++;
}
System.out.println(m); // 5.0

解法2

nを二進数表示する。桁数 - 1が求めるmである。

int n = 35;
String bin = Integer.toBinaryString(n); //100011
int len = bin.length();
System.out.println(len - 1); // 5