十六进制转换
题目描述
输入一个不超过100000位的十六进制数,请转换成八进制数。 注:十六进制数中,字母0-9还对应表示数字0-9,字母“A”(大写)表示10,“B”表示11,…,“F”表示15。比如:十六进制A10B表示的10进制数是:10163+1*162+0161+11*160=41227。转换成八进制数是:120413,因为185+2*84+083+4*82+1*81+3*80=41227。
输入
一个十六进制数,没有前导0。
输出
一个八进制数,没有前导0。
样例输入复制
123ABC
样例输出复制
4435274
#include <bits/stdc++.h>
using namespace std;
string a[16] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
string s,r="",k="";
int x;
bool f=false;
string t="01234567";
int main() {
cin>>s;
if(s=="0"){
cout<<0;
return 0;
}
for(int i=0; i<s.size(); i++) {
if(isdigit(s[i])) {
r=r+a[s[i]-'0'];
} else {
r=r+a[s[i]-'A'+10];
}
}
if(r.size()%3==1) r="00"+r;
else if(r.size()%3==2) r="0"+r;
for(int i=0; i<r.size(); i=i+3) {
x=(r[i]-'0')*4+(r[i+1]-'0')*2+(r[i+2]-'0')*1;
k=k+t[x];
}
while(k[0]=='0'){
k.erase(0,1);
}
cout<<k;
return 0;
}