12进制转10进制再转2进制【华中科技大学考研机试题】

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 << ' ';
    }
}
posted @ 2023-02-27 09:52  Keith-  阅读(43)  评论(0编辑  收藏  举报