📄문제
10진수 N이 입력되면 K진수로 변환하여 출력하는 프로그램을 작성하세요.
ℹ️ 조건
스택 자료구조를 사용하시기 바랍니다.
⬇️ 입력
첫 번째 줄에 10진수 N(10<=N<=1,000)과 K(2, 5, 8, 16)가 주어진다.
11 2 |
31 16 |
⬆️ 출력
K진수를 출력한다.
1011 |
1F |
📝 풀이
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> numbers;
int N, K;
scanf_s("%d %d", &N, &K);
int quotient = 0, remainder = N;
if (N == K)
{
printf("10");
return 0;
}
else
while (1)
{
quotient = N / K;
remainder = N % K;
N = quotient;
// 나머지 값 삽입
numbers.push(remainder);
if (N < K)
{
if (N != 0)
if (N < 10)
printf("%d", N);
else
printf("%c", 'A' + N - 10);
break;
}
}
while (!numbers.empty())
{
int number = numbers.top();
if (number < 10)
printf("%d", number);
else
printf("%c", 'A' + number - 10);
numbers.pop();
}
}
- stack 자료구조를 이용하여 계산된 나머지들을 stack에 삽입합니다.
- 계산이 끝났을 때 몫이 남아있다면, 출력합니다.
- stack은 가장 최근에 넣은 순서대로 가져올 수 있는 자료구조이기에, 이 문제에 적합합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 재귀함수 이진수 출력 (0) | 2023.10.16 |
---|---|
[C++] 기차 운행 (1) | 2023.10.16 |
[C++] Ugly Numbers 🔥 (1) | 2023.10.16 |
[C++] 영지(territory) 선택 🔥 (0) | 2023.10.16 |
[C++] 블록의 최댓값 (0) | 2023.10.16 |