toString()
을 쓰면 10진수의 숫자를 쉽게 n진수로 변환할 수 있다.
//10진수를 2진수로
number.toString(2);
//10진수를 8진수로
number.toString(8);
10진수가 아닌 숫자를 다른 숫자로 변환하기 위해서는 우선 10진수로 변환해야 한다.
toString()은 10진수만 쓸 수 있기 때문이다.
parseInt(number, n진수)
는 n진수의 숫자를 10진수로 바꿔주는 기능을 한다. 이것을 통해 10진수로 변환한 후 toString()을 사용하면 된다.
//2진수를 8진수로 변환하기
parseInt(2진수숫자, 2).toString(8);
//8진수를 16진수로 변환하기
parseInt(8진수숫자, 8).toString(16);
위에 나온 메서드들을 쓰지 않고 10진수를 2진수로 변환하는 알고리즘을 짜보자.
let num = 16;
let arr = [];
let answer = '';
//num을 2로 나눈 나머지를 빈 배열에 넣는다.
//num은 2로 나눈 자기자신의 정수부분의 값으로 재할당한다.
//while문은 num이 0이 되어 false가 될때까지 반복한다.
while(num){
arr.push(num % 2);
num = parseInt(num/2,10)
}
//num이라는 값을 2로 나눈 나머지가 arr에 누적되서 들어갔다.
//처음은 2, 그 다음은 4, 그 다음은 8로 나눈 것과 동일하다.
//이진수는 나누는 순서와 반대이므로 reverse시킨다.
arr.reverse();
arr.forEach((e)=>{result += e})
각 자리 숫자 합을 구할 때 while
문을 쓰면 굳이 arr를 만들지 않아도된다.
let number = 123;
let sum = 0;
while(number != 0){
sum += number % 10;
number = Math.floor(number/10);
}
위의 3. 이진수 변환함수와 4. 각 자리 숫자의 합은 모두 while
문으로 간단하게 구현했다. 두 문제의 공통점은 '같은 동작'을 '숫자가 끝날 때까지(0이 될때까지)'반복한다는 것이다.
이런 비슷한 기능을 구현할 때는 while
문을 쓰자