#include <cstdio> #include <string> #include <cmath> #include <iostream> #include <algorithm> using namespace std; int out[1000005]; int main() { int n; scanf("%d", &n); while(n--) { string s, ans; cin >> s; if(s[0] == '0') { printf("0\n"); continue; } int len = s.length(); for(int i = len - 1; i >= 0; i--) { if(s[i] == '0') ans += "0000"; else if(s[i] == '1') ans += "1000"; else if(s[i] == '2') ans += "0100"; else if(s[i] == '3') ans += "1100"; else if(s[i] == '4') ans += "0010"; else if(s[i] == '5') ans += "1010"; else if(s[i] == '6') ans += "0110"; else if(s[i] == '7') ans += "1110"; else if(s[i] == '8') ans += "0001"; else if(s[i] == '9') ans += "1001"; else if(s[i] == 'A') ans += "0101"; else if(s[i] == 'B') ans += "1101"; else if(s[i] == 'C') ans += "0011"; else if(s[i] == 'D') ans += "1011"; else if(s[i] == 'E') ans += "0111"; else if(s[i] == 'F') ans += "1111"; } len = ans.length(); if(len % 3 == 1) { len += 2; ans += "00"; } else if(len % 3 == 2) { len += 1; ans += "0"; } int cnt = 0; for(int i = 0; i < len; i += 3) out[cnt ++] = (ans[i] - '0') + (ans[i + 1] - '0') * 2 + (ans[i + 2] - '0') * 4; bool flag = false; for(int i = cnt - 1; i >= 0; i--) { if(out[i] == 0 && !flag) continue; flag = true; printf("%d", out[i]); } printf("\n"); } }
原文:http://blog.csdn.net/tc_to_top/article/details/44587403