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

스택(Stack)을 활용한 10진수에서 다양한 진법으로의 변환

스택을 이용한 진법 변환의 기본 원리

10진수를 여러 가지 진법(2진수, 8진수 등)으로 변환하려면 먼저 변수를 하나 선언하고, 계산하려는 진법의 값을 지정해야 합니다.

1. 진법 값 설정하기

이번 예제에서는 2진법으로 변환하기 위해 변수 baseNum을 다음과 같이 2로 설정했습니다.

int baseNum = 2;

마찬가지로 8진법으로 변환하고 싶다면 위 값을 다음과 같이 변경하면 됩니다.

int baseNum = 8;

또한 이 변수 값을 하드코딩하는 대신 사용자 입력으로 받아와서, 프로그램 실행 시점에 원하는 진법을 동적으로 지정할 수도 있습니다.

2. 스택 생성 및 자릿수 저장하기

변환할 숫자와 진법 값이 준비되면 스택(Stack)을 생성하고, 나눗셈과 나머지 연산을 반복하면서 각 자릿수를 스택에 저장합니다.

Stack s = new Stack();
do {
s.Push(n % baseNum);
n /= baseNum;
} while (n != 0);

위 코드에서 n % baseNum은 현재 자릿수를 구하고, n /= baseNum은 몫을 구해 다음 자릿수를 준비하는 과정입니다. 이 작업은 n이 0이 될 때까지 반복됩니다.

3. 스택에서 요소를 꺼내 결과 얻기

모든 자릿수를 스택에 저장한 후에는 요소를 하나씩 꺼내면(pop) 됩니다. 스택은 LIFO(Last In, First Out) 구조이기 때문에, 낮은 자릿수부터 저장된 값이 높은 자릿수부터 출력되어 올바른 순서의 결과를 얻을 수 있습니다.

예를 들어 숫자 n이 45라면, 2진법으로 변환한 결과는 다음과 같습니다.

Result...
101101

이처럼 스택을 활용하면 별도의 문자열 뒤집기 작업 없이도 간단하고 직관적으로 10진수를 원하는 진법으로 변환할 수 있습니다.