

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
string str;
int base;
int result = 0;
cin >> str >> base;
for (int i = 0; i < str.length(); i++) {
int strToNum = str[str.length() - (i + 1)];
if ('0' <= strToNum && strToNum <= '9') {
result += (strToNum - '0') * int(pow(base, i));
} else {
result += (strToNum - 'A' + 10) * int(pow(base, i));
}
}
cout << result;
}
진법이 정확이 무엇인지 몰라, 어제 구글링을 하며 기수법에 대한 포스팅을 했었습니다.
그리고 진법에 대해서 공부했고 10진법은 어떻게 구성되어있으며 어떻게 숫자로 표현하는지에 대해서도
공부하여 위 문제를 풀었습니다.
아스키코드를 활용하여 strToNum을 숫자로 바꿔준 뒤,
만약 아스키코드 0이나 9 사이에있으면 아스키코드 0을 strToNum에서 빼준 다음, base의 i제곱을 결과값에 추가합니다.
0이나 9 사이에 없다면 아스키코드 A에 10을 더해서 strToNum에서 빼준 다음, base의 i제곱을 결과값에 추가합니다.
그리고 최종적으로 반복문에서 빠져나오면 result를 출력해줍니다.
처음에는 정말 감이 잡히지 않았지만, 기수법에 대해서 알고나니 해결법이 보이는 문제였습니다.


#include <iostream>
using namespace std;
int main() {
int num;
int base;
cin >> num >> base;
int div = num;
int count = 0;
string answer = "";
while (1) {
if (0 <= div % base && div % base <= 9) {
answer += to_string(div % base);
} else {
answer += char(div % base + 55);
}
count++;
div = div / base;
if (div == 0) {
break;
}
}
for (int i = count - 1; i >= 0; i--) {
cout << answer[i];
}
}
마찬가지로 10진법을 n진법으로 변환하는 방법을 알면 쉽게 풀리는 문제입니다.
다만 문제를 풀며 부딪힌 부분은 계산된것을 바로 출력해주는것이 아닌 거꾸로 뒤집어 출력을 해야되는 것이었습니다.
처음에는 c++의 동적 할당을 알아보다가, '단순히 문자열만 추가해주면 되는거 아닌가?' 라고 생각해
혹시몰라 문자열에 + 연산자가 작동하는지 찾아보았는데, c++에서도 지원을 하였습니다.
그로인해 출력에 대한 문제를 해결하였고, 정답을 맞추었습니다.