题目描述:
给定一个8位的16进制数,您应该输出对应的8进制数(不应含有前导零)。
输入:
包含8位,每一位都是0-9或A-F之一。
输出:
一行只包括一个8进制数。
输入样例1:
0000000A
输出样例1:
12
输入样例2:
11111111
输出样例2:
给定一个8位的16进制数,您应该输出对应的8进制数(不应含有前导零)。
输入:
包含8位,每一位都是0-9或A-F之一。
输出:
一行只包括一个8进制数。
输入样例1:
0000000A
输出样例1:
12
输入样例2:
11111111
输出样例2:
2104210421
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s1,s2,s3;
int j=0;
char c;
cin>>s1;
while (s1[j]) {
switch (s1[j]) {
case '0': s2+="0000"; break;
case '1': s2+="0001"; break;
case '2': s2+="0010"; break;
case '3': s2+="0011"; break;
case '4': s2+="0100"; break;
case '5': s2+="0101"; break;
case '6': s2+="0110"; break;
case '7': s2+="0111"; break;
case '8': s2+="1000"; break;
case '9': s2+="1001"; break;
case 'A': s2+="1010"; break;
case 'B': s2+="1011"; break;
case 'C': s2+="1100"; break;
case 'D': s2+="1101"; break;
case 'E': s2+="1110"; break;
case 'F': s2+="1111"; break;
default: break;
}
++j;
}
j=s2.size()-1;
while (s2[j] && j>=0) {
int t=3,num=0;
while (t-- && j>=0) {
if (s2[j]=='1') {
switch (t) {
case 0: num+=4; break;
case 1: num+=2; break;
case 2: num+=1; break;
default:break;
}
}
--j;
}
s3+=(num+'0');
}
int tt=s3.size()-1;
for (j=0;j<=tt/2;j++) {
c=s3[j];
s3[j]=s3[tt-j];
s3[tt-j]=c;
}
j=0;
while (s3[j++]=='0');
printf ("%d\n",j);
for (--j;j<s3.size();++j)
cout<<s3[j]-'0';
puts("");
return 0;
}