#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