問題概要

codingameの中のClash of Codeで書いたもの。2進数を16進数に変換せよて問題だった。c++だとどう書くのが早いのか。0b0110のようなクエリが与えらるので、0x6 と答えるような問題。1度10進数に変換したほうがいいか。 競プロとかで出てもおかしくないので、メモしておく。

コード

AC

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)

int main(void){
    //0b01011010
    string s; cin >> s;
    string t = s.substr(2);
    int u = (4 - t.size()) % 4;
    rep(i, u) t = 0 + t;

    string ans = "0x";
    for (int i = 0; i < t.size(); i += 4){
        string v = t.substr(i, 4);
        if(v == "0000") ans += 0;
        else if(v == "0001") ans += 1;
        else if(v == "0010") ans += 2;
        else if(v == "0011") ans += 3;
        else if(v == "0100") ans += 4;
        else if(v == "0101") ans += 5;
        else if(v == "0110") ans += 6;
        else if(v == "0111") ans += 7;
        else if(v == "1000") ans += 8;
        else if(v == "1001") ans += 9;
        else if(v == "1010") ans += a;
        else if(v == "1011") ans += b;
        else if(v == "1100") ans += c;
        else if(v == "1101") ans += d;
        else if(v == "1110") ans += e;
        else if(v == "1111") ans += f;
    }
    cout << ans << endl;//0x5a
    return 0;
}