任何疑问、意见、建议请在公众号:一航代码留言
十二进制是数学中一种以12为底数的计数系统,它由0~9,a,b组成,与十进制的对应关系是:0~9对应0~9,a对应10,b对应11。例如,十二进制的a2,十进制是122。输入一个仅含十二进制数字的字符串(字母一律小写,不超过8个字符),完成下列任务:
(1)输出该十二进制数每一位对应的十进制数(从高位到低位顺序输出,空格隔开);
(2)实现“十二进制”转“十进制”算法,输出该十二进制数对应的十进制数;
(3)输出转换后的十进制数在内存中的每个二进制位(共4字节,每字节之间空格隔开)。
输入格式:
输入一个十二进制数(字母一律小写,不超过8个字符)。
输出格式:
第一行输出该十二进制数每一位对应的十进制数(由高位到低位,以空格隔开)
第二行输出该十二进制数对应的十进制数
第三行输出转换后的十进制数在内存中的每个二进制位(共4个字节,每字节之间空格隔开)
输入样例:
a2
输出样例:
10 2
122
00000000 00000000 00000000 01111010
解决方法:
(1)代码实现:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
int main()
{
string s;
cin >> s;
int res = 0; //存十进制结果
for (int i = 0; i < s.size(); i++)
{
int num = s[i] - '0'; //将字符转化为数字
if (isdigit(s[i]))
{
cout << s[i];
res += (num * pow(12, s.size() - i - 1));
}
else if (s[i] == 'a')
{
cout << 10;
res += (10 * pow(12, s.size() - i - 1));
}
else if (s[i] == 'b')
{
cout << 11;
res += (11 * pow(12, s.size() - i - 1));
}
if (i != s.size() - 1) //i!=s.size()-1是为了控制输出空格隔开,并且后面没有多余的空格
{
cout << " ";
}
else
{
cout << endl;
}
}
cout << res << endl;
vector<int> bin(32, 0);
int i = 31;
while (res / 2 != 0) //将十进制转换为二进制数
{
bin[i] = res % 2;
res /= 2;
i--;
}
bin[i] = res;
for (int i = 0; i < 32; i++) //控制输出
{
cout << bin[i];
if ((i + 1) % 8 == 0)
{
cout << " ";
}
}
system("pause");
return 0;
}