Алгоритм кодовых войн
Проблема
Завершите функцию, которая определяет, является ли данное неотрицательное целое число степенью двойки.
음수가 아닌 정수가 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를 반환한다.