Алгоритм кодовых войн

Проблема

Завершите функцию, которая определяет, является ли данное неотрицательное целое число степенью двойки.

음수가 아닌 정수가 2의 거듭제곱인지 확인하는 함수를 작성해라.

Решение 01

function isPowerOfTwo(n) {
  let result = 0;
  if (n === 0) return false;
  if (n === 1 || n === 2) return true;
  for (let i = 2; i < n; i *= 2) {
    result = i * 2;
  }
  return n === result;
}
isPowerOfTwo(0);     // false
isPowerOfTwo(1);     // true
isPowerOfTwo(2);     // true
isPowerOfTwo(3);     // false
isPowerOfTwo(4);     // true
isPowerOfTwo(5);     // false
isPowerOfTwo(1024);  // true

Решение 02

function isPowerOfTwo(n) {
  return Math.log2(n) % 1 === 0 ? true : false;
}
isPowerOfTwo(0);     // false
isPowerOfTwo(1);     // true
isPowerOfTwo(2);     // true
isPowerOfTwo(3);     // false
isPowerOfTwo(4);     // true
isPowerOfTwo(5);     // false
isPowerOfTwo(1024);  // true
  • Math.log2(): 숫자를 log2(숫자)로 반환한다.

Решение 03

function isPowerOfTwo(n) {
  return Number.isInteger(Math.log2(n));
}
isPowerOfTwo(0);     // false
isPowerOfTwo(1);     // true
isPowerOfTwo(2);     // true
isPowerOfTwo(3);     // false
isPowerOfTwo(4);     // true
isPowerOfTwo(5);     // false
isPowerOfTwo(1024);  // true
  • Number.isInteger(): 값이 정수인지 확인하고, true/false를 반환한다.