
진법 변환 2 어떻게 푸나요?
난 처음에 이 문제를 보고 아주 쉬운 문제로 생각했다.. 그이유는 전에 푼 진법 변환문제에서 반대로 하면 될줄 알았지만..? 쉬운건 나였다..

하지만 여러번에 실패를 맞보고 풀게 되었는데 한번 내가 생각한 그대로 순서를 봐보자
보면 아주 쉬움
- 진법 변환할때 n / b을 하고 나머지를 구하고 더하면 진법이다.
- 만약 10보다 작게 나올경우 나머지를 그냥 더한다
- 반복문은 n보다 b가 클때까지 1번과 2번을 반복한다.
- n이 0이 아닐땐 1번문과 2번을 실행한다.
이 순서를 생각하면 쉽긴하지만..? 이걸 그대로 하게 된다면 아주 많은 오답을 보게 될것이다. 하지만 아스키코드의 성질을 생각해보면 저기서 조금이라도 추가하면 알게 될것인데. 먼저 아스키 코드의 성질을 알아보자
아스키 코드의 성질
- int형에다 문자'0'을 더하면 거기에 맞는 문자로 바뀐다 (ex 35 + '0' => "35")
- 만약 1에서 한 값이 '9'보다 크면 '0'을빼고 ('A'-10)을 더하면 거기에 맞는 대문자 알파벳이 나온다 (ex (35 + '0') - '0' + 'A' + 10 => 'Z')
이것을 생각하고 푼다면? 아주 쉽게 풀릴것이다.
#include<iostream>
#include<string>
#include <algorithm>
#include<cmath>
using namespace std;
int main() {
int n, n_Num;
string Temp = "", result = "";
//tmp != 0 && n_Num > 10
cin >> n >> n_Num;
while (true) {
int tmp = n % n_Num + '0';
if (('0' <= tmp && tmp <= '9')) {
Temp += to_string(tmp - '0');
}
else {
Temp += (char)(tmp - '0' + 'A' - 10);
}
//cout << (char)(tmp - '0' + 'A' - 10) << "\n";
n /= n_Num;
if (n < n_Num) {
break;
}
}
if (n != 0) {
if (n >= 10) {
Temp += (char)(n + 'A' - 10);
}
else {
Temp += to_string(n);
}
}
for (int i = Temp.length() - 1; i >= 0; i--) {
result += Temp[i];
}
cout << result << "\n";
}