Problem
Convert a base 2 number to a base 4 number -- Microsoft
Solution
/*
============================================================================
Author : James Chen
Email : a.james.chen@gmail.com
Description : Convert a base 2 number to a base 4 number
Created Date : 3-August-2013
Last Modified :
===========================================================================
*/
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
bool ToBase4(string& numBase4, string& numBase2)
{
int k = numBase4.size() - 1;
for(int i = numBase2.size() - 2; i >= 0; i -= 2){
if((numBase2[i] - '0' == 0 || numBase2[i] - '0' == 1) &&
(numBase2[i + 1] - '0' == 0 || numBase2[i + 1] - '0' == 1)){
int value = (numBase2[i] - '0') * 2 + (numBase2[i + 1] - '0');
numBase4[k--] = value + '0';
}
else{
return false;
}
}
if(k == 0){
numBase4[0] = numBase2[0];
}
return true;
}
void DoTest(string numBase2)
{
cout << "The input(base2) : " << endl;
cout << numBase2 << endl;
string numBase4;
numBase4.resize((numBase2.size() + 1) / 2);
if(ToBase4(numBase4, numBase2)){
cout << "The output(base4) is : " << endl;
cout << numBase4 << endl;
}
else{
cout << "Invalid input" << endl;
}
cout << "---------------------" << endl;
}
int main(int argc, char* argv[])
{
int a = 0x01020304;
char buff[40];
itoa(a, buff, 2);
DoTest(buff);
DoTest("110110001");
DoTest("120110001");
return 0;
}
Output
The input(base2) :
1000000100000001100000100
The output(base4) is :
1000200030010
---------------------
The input(base2) :
110110001
The output(base4) is :
12301
---------------------
The input(base2) :
120110001
Invalid input
---------------------
Press any key to continue . . .