用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出,十六进制表示成3位,八进制表示成4位,若不够前面补0。(不考虑输入不合法的情况)
输入
1D5
输出
(注意冒号后面有一个空格)
Hex: 0x1D5
Decimal: 469
Octal: 0725
#include <iostream>
#include <cstdio>
#include <math.h>
#include <string.h>
#include <string>
#include <algorithm>
#include <stack>
#include <list>
#include <vector>
using namespace std;
typedef long long ll;
void hexToOct(string str){
string res = "";
for(int i=0;i<str.length();i++){
switch(str[i]){
case '0': res += "0000";
break;
case '1': res += "0001";
break;
case '2': res += "0010";
break;
case '3': res += "0011";
break;
case '4': res += "0100";
break;
case '5': res += "0101";
break;
case '6': res += "0110";
break;
case '7': res += "0111";
break;
case '8': res += "1000";
break;
case '9': res += "1001";
break;
case 'A': res += "1010";
break;
case 'B': res += "1011";
break;
case 'C': res += "1100";
break;
case 'D': res += "1101";
break;
case 'E': res += "1110";
break;
case 'F': res += "1111";
break;
default:
break;
}
}
int a[4],j=0;
for(int i=0;i<res.length()-2;i+=3){
a[j++] = (res[i] - '0') * 4 + (res[i+1] - '0') * 2 + (res[i+2] - '0');
}
cout<<"Octal: ";
for(int i=0;i<4;i++){
cout<<a[i];
}
cout<<endl;
}
void hexToDec(string str){
ll sum = 0;
for(int i=0;i<str.length();i++){
if(str[i]>='0'&&str[i]<='9'){
sum = sum * 16 + (str[i] - '0');
}
else{
sum = sum * 16 + (str[i] - 'A' + 10);
}
}
cout<<"Decimal: "<<sum<<endl;
}
int main(){
ios::sync_with_stdio(false);
string str;
cin>>str;
cout<<"Hex: 0x"<<str<<endl;
hexToDec(str);
hexToOct(str);
return 0;
}