wecode <자기소개> 사용 기술 설명

이석원·2022년 7월 2일
0

계산기 1부

매우 큰 수를 계산해서 제대로 결과값을 표시하는 계산기를 찾지 못해서 만들어 봤다. 십진수와 이진수간 변환기는 현재 큰 수를 처리하지 못해서 업데이트 중이다. 변환하려는 숫자를 여럿으로 나누고 변환을 끝마친 다음 미리 만들어둔 큰 수 덧셈기로 더할 생각이다.

1. 2진수->16진수

16은 2의 4제곱이다. 따라서 진수 변환기 중 가장 만들기 쉬웠다.
일반적인 과정은 다음과 같다.
1111101000000011 ->1111 1010 0000 0011->F A 0 3
2진수를 4개 단위로 자른다. 각각의 이진수를 16진수로 변환한다. 각각을 하나로 결합한다. 반환한다. toString() 은 사용하지 않았다. 만들 당시에는 이렇게 편리한 내장함수가 있는지 몰랐다.
자기소개서에 들어있는 진수 변환기는 문자열로 처리하기 때문에 한 페이지가 넘어가는 큰 숫자도 문제 없이 계산한다.

function twoSixteen(twoSixteenNum){
    const arr = [...twoSixteenNum];
    let sum=0, i=arr.length-1,j=0,stringSixteen='';
    while(i>=0){
        if(j === 4) {j=0;} //4개씩 쪼개기 위해 넣어둔 조건식
        sum += (2**j)*parseInt(arr[i])
        if(j === 3 && sum > 9) {
            sum = data[sum]; 
        }
        if(j === 3){stringSixteen = String(sum) + stringSixteen; sum=0;}
        else if(arr[i-1]===undefined){stringSixteen = String(sum) + stringSixteen;}
        i--;
        j++;
    }
    return stringSixteen;
    const data = {10: 'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'};

2.16진수->2진수

F A 0 3 ->1111 1010 0000 0011->1111101000000011
16진수 각각의 숫자를 2진수로 변환하므로 숫자가 나오는 구간은 이진수 4자리로 통일했다. 나머지 과정은 모두 문자열로 처리하기 때문에 매우 매우 큰 숫자도 무리없이 변환할 수 있다. 코드는 생략하겠다.

3.덧셈 계산기

십진수 덧셈 계산기다. 숫자를 문자열로 받아서 배열로 쪼갠다. 더하려는 모든 숫자는 이 과정을 거친다. 각각의 자릿수에 따라 서로를 더한다. 예를 들어서
300 은->[0,0,3] 21은->[1,2] 우리가 입력하는 숫자를 뒤집어서 다음 과정을 진행해야 편안하다. 인덱스 0 은 0+1=1이다. 인덱스 1은 0+2 = 2다.
3은 더할 숫자가 없으므로 그대로 인덱스 2로 들어간다. 결과는 [1,2,3] 이다. 다시 뒤집어서 문자열로 만들어서 리턴한다. 덧셈에서 어려운 점은 9+2와 같은 경우다. 자릿수를 올려줘야 하기 때문에 전체 배열을 다시 한번 순서대로 나아가면서 10보다 큰 숫자가 있는지 찾도록 만들었다. 있다면 예를 들어 11-10 을 하고 다음 숫자에 +1을 해줬다.
결과적으로 최대 두 자리수 덧셈으로 쪼개서 계산했다.

profile
개발자 공부중

0개의 댓글