10진수 n이 입력되면 k진수로 변환하여 출력하는 프로그램을 만들어보는 문제이다. (스택 자료구조사용)
입력 10진수 n이 주어지고 k가 주어진다.
입력예제 11 2
출력예제 1011
2진수 변환 방법은 주어진 수 n을 2로 나눈 나머지를 스택에 push하고 n을 몫에 넣어준후에 몫이 0이 될때까지 반복한다.
스택으로 구현하여 pop하면 first in last out 구조로 나중에 넣은 값이 먼저 출력되기 때문에 2진수 변환을 구할 수 있다.
스택의 top은 -1로 초기화하고 push하기전에 +1 pop하고 난 후에 -1한다.
스택에는 언더플로우와 오버플로우가 있는데 언더플로우 예방방법으로 top이 0이상일 때까지 pop이 가능하게 만들면 되고, 오버플로우 예방은 stack의 크기가 100이라면 0 ~ 99 까지의 인덱스에 스택의 요소들이 있을 수 있는데 100번째 인덱스(스택의 크기와 같거나 클 때 push불가능하게 만들어주면 된다.)
#include<stdio.h>
int n, k, i, j, num, quotient, remainder;
int top = -1;
int capacity = 0;
int stack[100];
int array[100];
void push(int n)
{
stack[++top] = n;
capacity++;
}
int pop()
{
return stack[top--];
}
void binaryRevision(int n)
{
while(n >= 1)
{
quotient = n / 2;
remainder = n % 2;
n = quotient;
push(remainder);
}
}
void Revision16(int n, int k)
{
while(n >= 1)
{
quotient = n / 16;
remainder = n % 16;
n = quotient;
push(remainder);
}
}
int main()
{
char str[20] = {"0123456789ABCDEF"};
scanf("%d %d", &n, &k );
Revision16(n, 16);
for(i = 0; i < capacity; i++)
{
printf("%c", str[pop()]);
}
return 0;
}
'ALGORITHM > 인프런코테' 카테고리의 다른 글
3-1 두 배열 합치기(자바) (1) | 2023.10.06 |
---|---|
38 inversion sequence (0) | 2023.07.19 |