3진법

jjj·2024년 2월 16일
0

메모

목록 보기
8/20
// 변환 예시: 10진법의 수를 3진법으로 변환하려면, 주어진 수를 3으로 나누고, 나머지를 기록하는 과정을 반복합니다. 이 과정을 수가 0이 될 때까지 계속하고,
// 마지막에 얻은 나머지를 역순으로 읽으면 그것이 3진법으로의 표현입니다.

//10진법을 3진법으로 바꾸는 함수

// 주어진 10진법 수를 3으로 나눕니다.
// 나머지를 기록합니다.
// 나눗셈의 몫을 다시 3으로 나눕니다.
// 마찬가지로 나머지를 기록
// 이 과정을 몫이 0이 될 때까지 반복합니다.
// 41을 직접 손으로 3진법
// 41 % 3 = 13...2
// 13 % 3 = 4...1
// 4 % 3 = 1...1
// 1 % 3 = 0 ...1
//나머지를 역으로  1112
function tentothree(n) {
  let arr = []; //나머지를 담을 배열을 선언
  while (n !== 0) {
    //n :28
    //remain: 1
    //share :9
    //n:9
    let remain = n % 3; // 나머지
    arr.push(remain); // arr에 나머지를 저장
    let share = Math.floor(n / 3); //몫
    n = share;
  }
  arr.reverse();
  return Number(arr.join(''));
}

//3진법을 10진법으로 바꾸는 함수
function threetoten(n) {
  let ret = 0;
  let cnt = 0;
  while (n !== 0) {
    let remain = n % 10;
    ret += remain * Math.pow(3, cnt);
    n = Math.floor(n / 10);
    cnt++;
  }
  return ret;
}
function solution(n) {
  // 3진법 뒤집기
  //n이 10진법 숫자
  // 1번째 할일: 3진법으로 바꾸는 것
  // 2번째 할일: 1의 결과를 뒤집기
  // 3번재 할이리 10진법으로 바꾸기
  let num3 = tentothree(n);
  let reversenum3 = Number([...String(num3)].reverse().join(''));
  let answer = threetoten(reversenum3);

  return answer;
}
console.log(solution(45));

0개의 댓글

관련 채용 정보