문제

링크

풀이

#include <iostream>
#include <string>
using namespace std;
 
string hex2bin(const char &c) {
  switch (c) {
    case '0': return "0000";
    case '1': return "0001";
    case '2': return "0010";
    case '3': return "0011";
    case '4': return "0100";
    case '5': return "0101";
    case '6': return "0110";
    case '7': return "0111";
    case '8': return "1000";
    case '9': return "1001";
    case 'A': return "1010";
    case 'B': return "1011";
    case 'C': return "1100";
    case 'D': return "1101";
    case 'E': return "1110";
    case 'F': return "1111";
  }
}
 
string bin2oct(string &s) {
  string ret = "";
  while (s.length() % 3) s = "0" + s;
  for (int i=0; i<s.length(); i+=3) {
    ret += to_string(4*(s[i]-'0') + 2*(s[i+1]-'0') + (s[i+2]-'0'));
  }
  return ret;
}
 
void solve(void) {
  string s; cin >> s;
  if (s == "0") { cout << "0"; return; }
 
  string bin = "";
  for (char c : s) bin += hex2bin(c);
 
  string ans = bin2oct(bin);
  while (ans.size() && ans[0] == '0') ans = ans.substr(1);
  cout << ans;
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}