#include<iostream>
#include<string>
using namespace std;
string resoxTOb(char ch) {
//单纯的字符转换(16->2)
if (ch == ‘0‘)
return "0000";
else if (ch == ‘1‘)
return "0001";
else if (ch == ‘2‘)
return "0010";
else if (ch == ‘3‘)
return "0011";
else if (ch == ‘4‘)
return "0100";
else if (ch == ‘5‘)
return "0101";
else if (ch == ‘6‘)
return "0110";
else if (ch == ‘7‘)
return "0111";
else if (ch == ‘8‘)
return "1000";
else if (ch == ‘9‘)
return "1001";
else if (ch == ‘A‘)
return "1010";
else if (ch == ‘B‘)
return "1011";
else if (ch == ‘C‘)
return "1100";
else if (ch == ‘D‘)
return "1101";
else if (ch == ‘E‘)
return "1110";
else
return "1111";
}
string resbTOo(string str) {
//单纯的字符转换(2->8)
if (str == "000")
return "0";
else if (str == "001")
return "1";
else if (str == "010")
return "2";
else if (str == "011")
return "3";
else if (str == "100")
return "4";
else if (str == "101")
return "5";
else if (str == "110")
return "6";
else if(str=="111")
return "7";
}
void oxTOb(string ox[],string b[],int n) {
//16进制转换为2进制
for (int i = 0; i < n; i++) {
for(int j=0;j<ox[i].length();j++){
b[i] += resoxTOb(ox[i][j]);
}
}
}
void bTOo(string o[], string b[], int n) {
//2进制转换为8进制
for (int i = 0; i < n; i++) {
if (b[i].length() % 3 == 1) {
b[i].insert(0, "00");
}
else if(b[i].length() % 3 == 2){
b[i].insert(0, "0");
}
for (int j = 0; j<b[i].length(); j+=3) {
o[i] += resbTOo(b[i].substr(j,3));
}
}
}
void bTOd(string b[], long long d[], int n) {
//2进制转换为10进制,直接利用2的幂运算简单粗暴
for (int i = 0; i < n; i++) {
d[i] = 0;
for (int j = b[i].length()-1; j >=0; j--) {
if (b[i][j] == ‘1‘) d[i] += pow(2, b[i].length() - 1-j);
}
}
}
void format(string o[],int n) {
//格式输出,不然输入0,会输出00这样的结果。
for (int i = 0; i < n; i++) {
while (true) {
if (o[i] == "0" || o[i][0] != ‘0‘)
break;
else o[i].erase(0, 1);
}
}
}
int main() {
string ox[10];
string o[10];
string b[10];
long long d[10];
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> ox[i];
}
oxTOb(ox, b, n);
string newb[10];
for (int i = 0; i < n; i++) {
newb[i] = b[i];
}
bTOo(o, b, n);
format(o, n);
bTOd(b, d, n);
for (int i = 0; i < n; i++) {
cout << "0x"<<ox[i]<<"的二进制为:"<<newb[i]<<"B,八进制为:"<<o[i]<<"O,十进制为:"<<d[i] <<"D"<< endl;
}
}
原文:https://www.cnblogs.com/MrDaddy/p/14352305.html