★★☆☆☆
a->b진법으로 옮기는 문제
직접 옮긴다고 생각하지 않고, a->10->b 순서로 옮긴다는 생각이 들면 푸는 데에 오래걸리지 않는다.
#include <iostream>
#include <cmath>
#include <stack>
using namespace std;
int main() {
int a, b;
cin >> a;
cin >> b;
int m;
cin >> m;
long long tem=0;
for (int i = m-1; i >=0; i--) {
int x;
cin >> x;
tem += x * pow(a, i);
//cout << "tem :: " << tem << "\n";
}
//cout << "변환 완료 : " << tem << "\n";
if (tem == 0) {
cout << 0 << "\n";
return 0;
}
stack<int> arr;
for (int i = 1;tem>=1; i++) {
arr.push(tem%b);
tem = tem / b;
}
while (!arr.empty()) {
cout << arr.top()<<" ";
arr.pop();
}
cout << "\n";
return 0;
}
친절하게 a진법의 자릿수를 주기때문에 굳이 메모리를 더 차지하지 않고, 입력받으면서 바로 10진수로 변환해주었다.
변환한 값이 0이라면 바로 return을 하고, 아닌 경우 b진수로의 변환 과정을 거쳤다.
10->b진수 문제는 앞에서도 했기 때문에 빠르게 코드를 짤 수 있었다.
https://ldgeao99.tistory.com/308
재귀함수를 사용하여, 숫자가 0이되면 return을 한다.
재귀함수의 특성으로 역으로 출력되는 효과가 나타났다.