Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 10진수를 다른 진법으로 빠르게 변환하는 방법

C#에서 10진수를 2진수, 8진수 등 다른 진법으로 빠르게 변환하려면 Stack(스택)을 활용하는 것이 효과적입니다. 스택의 LIFO(Last In, First Out) 특성 덕분에 나머지 연산으로 구한 자릿값들을 역순으로 꺼내어 올바른 결과를 얻을 수 있습니다.

1. 목표 진법 설정하기

먼저 변환하고자 하는 진법을 변수에 저장합니다. 예를 들어 2진수로 변환하려면 baseNum을 2로 설정합니다.

int baseNum = 2;

다른 진법이 필요하다면 값만 변경하면 됩니다.

// 8진수
int baseNum = 8;

// 10진수
int baseNum = 10;

2. 스택을 이용한 변환 로직

목표 진법을 정했다면, 스택을 생성하고 나눗셈의 나머지를 반복적으로 계산하여 각 자릿값을 스택에 저장합니다. 여기서 n은 변환할 10진수입니다.

Stack s = new Stack();
do {
    s.Push(n % baseNum);   // 나머지를 스택에 저장
    n /= baseNum;          // 몫으로 n 갱신
} while (n != 0);

이 과정에서 n % baseNum은 현재 자릿값을 구하고, n /= baseNum은 다음 자릿값을 계산하기 위해 수를 줄여나가는 역할을 합니다.

3. 스택에서 요소 꺼내기

변환이 끝나면 스택에서 요소를 하나씩 꺼내(Pop) 연결하면 최종 결과가 완성됩니다. 마지막에 저장된 가장 큰 자릿값부터 순서대로 출력되기 때문에 별도의 뒤집기 작업이 필요 없습니다.

실행 결과 확인

예를 들어 10진수 45를 2진수(밑이 2)로 변환하면 다음과 같은 결과를 얻을 수 있습니다.

Result...
101101

검산해 보면 45 = 32 + 8 + 4 + 1 = 101101₂로 정확히 일치합니다. 이 방식은 진법 값만 바꾸면 어떤 진법으로도 손쉽게 확장할 수 있다는 장점이 있습니다.