12进制转10进制再转2进制
十二进制是数学中一种以 12为底数的计数系统,它由 0∼9,a,b组成,与十进制的对应关系是:0∼9对应 0∼9,a对应 10,b对应 11。
例如,十二进制的 a2,十进制是 122。
输入一个仅含十二进制数字的字符串(字母一律小写,不超过 8
个字符),完成下列任务:
输出该十二进制数每一位对应的十进制数(从高位到低位顺序输出,空格隔开);
实现“十二进制”转“十进制”算法,输出该十二进制数对应的十进制数;
输出转换后的十进制数在内存中的每个二进制位(共 4 字节,每字节之间空格隔开)。
输入格式
输入一个十二进制数(字母一律小写,不超过 8 个字符)。
输出格式
第一行输出该十二进制数每一位对应的十进制数(由高位到低位,以空格隔开)。
第二行输出该十二进制数对应的十进制数。
第三行输出转换后的十进制数在内存中的每个二进制位(共 4
个字节,每字节之间空格隔开)。
输入样例:
a2
输出样例:
10 2
122
00000000 00000000 00000000 01111010
代码
点击查看代码
#include<iostream>
using namespace std;
const char nl = '\n';
const int N = 32;
int st[N];
int main(){
string s;
cin >> s;
int j;
if(s[0] == '-')j = 1; //注意可能是负数
else j = 0;
int ret = 0;
//12进制转10进制(高进制转10进制)
for(int i = j; i <= s.size() - 1; i ++ ){
ret *= 12;
if(s[i] >= '0' && s[i] <= '9'){
ret += s[i] - '0';
cout << s[i] - '0' << ' ';
}
else{
ret += s[i] - 'a' + 10;
cout << s[i] - 'a' + 10 << ' ';
}
}
if(!j)cout << nl << ret << nl;
else cout << nl << -ret << nl << '-';
//10进制转2进制(10进制转低进制·)
int top = 0;
while(ret){
st[++top] = ret & 1;
ret >>= 1;
}
int cnt = 0;
int t = 32 - top;
while(t --){
cout << 0;
cnt ++;
if(cnt % 8 == 0)cout << ' ';
}
while(top){
cout << st[top --];
cnt ++;
if(cnt % 8 == 0)cout << ' ';
}
}