Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 숫자의 이진 표현으로 1 계산하기

<시간/>

문제

첫 번째이자 유일한 인수로 단일 정수 num을 취하는 JavaScript 함수를 작성해야 합니다. 우리 함수는 0과 num 사이의 모든 숫자(둘 모두 포함)에 대한 배열을 준비해야 합니다. 각 숫자에 대해 해당 요소는 해당 숫자의 이진 표현에 포함된 1의 숫자여야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const num = 4;

그러면 출력은 다음과 같아야 합니다. -

const output = [0, 1, 1, 2, 1];

출력 설명:

0은 0을 포함하기 때문에 2진 형식으로 1은 1을 포함하는 식입니다.

예시

이에 대한 코드는 -

const num = 4;
const mapBinary = (num = 0) => {
   if (num === 0){
      return [0];
   };
   const res = [0];
   for (let i = 1; i <= num; i++) {
      const n = i % 2 === 0 ? res[i/2] : res[Math.floor(i/2)] + 1;
      res.push(n);
   };
   return res;
};

코드 설명:

비트를 계산하는 동안 작업을 더 쉽게 하기 위해 염두에 둘 수 있는 몇 가지 사항이 있습니다.

  • numberOfBits(n) ===numberOfBits(2*n) , 두 번째 결과는 첫 번째 결과에 비해 0비트를 하나 더 얻습니다.

  • n이 짝수이면 n의 마지막 비트는 0이 됩니다.

  • n이 홀수인 경우 결과를 계산하는 것은 마지막 비트(n-1)/2를 1로 바꾸는 것으로 간주될 수 있으므로 numberOfBits(n) ===numberOfBits(Math.floor(n / 2)) 방정식을 얻습니다. + 1 .

출력

콘솔의 출력은 -

[ 0, 1, 1, 2, 1 ]