11.题目链接:十六进制转十进制
代码:
#include<bits/stdc++.h>
using namespace std; //申请命名空间
int main()
{
char s[8]; //根据题目要求字符数量不能超过8位,因此定义一个长度为8的字符串数组
while(cin >> s)
{ //输入字符串内容
int len = strlen(s); //通过strlen获取输入字符串的长度
long long int m = 0,n = 16; //由于8位16进制数表示的范围超出了int所能够表示的范围,因此定义为long long类型
for(int i = 0;i < len;i++)
{ //通过分离0~9和A~F来计算转换后的十进制数
if(s[i] >= '0' && s[i] <= '9')
{
m = m * n + (s[i] - '0');
}
else
{
m = m * n + (s[i] - 'A' + 10);
}
}
cout << m;
}
return 0;
}
12.题目链接:十六进制转八进制
代码:
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
int n=0;
cin>> n;
string* Hex = new string[n];//16进制的字符串
string tmpOct;
string* Oct = new string[n];//8进制的字符串
for(int i=0;i<n;i++)
{
int CurBit = 0;
cin>>Hex[i];
tmpOct = "";
Oct[i] = "";
for(int j=Hex[i].size()-3;j>=0;j-=3)
{
int d = 0;
for(int k=0;k<3;k++)
{
int t = j+k;
// 16 To 10
if(Hex[i][t]>='0' && Hex[i][t]<='9')
{
CurBit = Hex[i][t]-'0';
}
if(Hex[i][t]>='A' && Hex[i][t]<='F')
{
CurBit = Hex[i][t]-'A'+10;
}
d = d * 16 + CurBit;
}
// 3bit hex to 4bit oct
int base = 7; // 111B
for(int k=0;k<4;k++)
{
tmpOct += (char)('0' + (d & base));
d = d >> 3;
}
d = 0;
}
// last less three
int rest = Hex[i].size() % 3;
if(rest != 0)
{
int d = 0;
for(int k=0;k<rest;k++)
{
// 16 To 10
if(Hex[i][k]>='0' && Hex[i][k]<='9')
{
CurBit = Hex[i][k]-'0';