Clash of Code 2進数から16進数変換
問題概要
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; }