开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情
蓝桥杯基础算法其二进制转换
十六进制转为八进制
提示将十六进制转为x进制,然后再将x进制数转为八进制
这里我们就想起计算机世界里面以二进制为主,所以我们将十六进制转为二进制
但是再想个算法去转换就很麻烦了,所以用一种笨办法,直接算出十六进制数转二进制的结果,然后通过switch来获得
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
//设置一个中间变量,用来存储二进制数
string tow;
//十六进制数
string sixteen;
//最后转换的八进制数
string eight;
cin>>sixteen;
for(int j=0; j<sixteen.length(); j++)
{
switch(sixteen[j])
{
case '0':tow+="0000";break;
case '1':tow+="0001";break;
case '2':tow+="0010";break;
case '3':tow+="0011";break;
case '4':tow+="0100";break;
case '5':tow+="0101";break;
case '6':tow+="0110";break;
case '7':tow+="0111";break;
case '8':tow+="1000";break;
case '9':tow+="1001";break;
//注意大小写问题
case 'A':
case 'a':tow+="1010";break;
case 'B':
case 'b':tow+="1011";break;
case 'C':
case 'c':tow+="1100";break;
case 'D':
case 'd':tow+="1101";break;
case 'E':
case 'e':tow+="1110";break;
case 'F':
case 'f':tow+="1111";break;
}
}
//因为二进制转八进制,是三位一体 最高7=111
//所以先判断整体是否能够平均划分
//%3=1 表示有一位是单独的,肯定是最前面的,所以在最前面进行补0
if(tow.length()%3==1)
tow="00"+tow;
//同理%3=2 有两个是一组的,前面补一个0即可
if(tow.length()%3==2)
tow="0"+tow;
//计算前判断是否有前置三个0,如果没有就将前三位进行计算
if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0'))
{
char temp;
//111->1*(2^2)+1*(2^1)+1*(2^0) 进制转换公式
temp = (tow[0]-'0')*4+(tow[1]-'0')*2+tow[2];
eight += temp;
}
//然后以三位一组进行计算
for(int j=3; j<tow.length(); j+=3)
{
eight+=(tow[j]-'0')*4+(tow[j+1]-'0')*2+tow[j+2];
}
cout<<eight<<endl;
}
return 0;
}
十六进制转为十进制
#include<iostream>
#include<string>
#include<math.h>//下面的pow,需要
using namespace std;
int main()
{
string a;
cin >> a;
char b[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
//string b = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
//不能用在Devc++中,当然练习系统也不能通过
int c[10];
int k = a.length() - 1;//目的对应好幂的次方
for (int j = 0; j < a.length(); j++)
{
for (int i = 0; i < 16; i++)
{
if (a[j] == b[i])
{
//得到每一位对应的数
c[k--] = i;
}
}
}
long long int sum = 0;//应对sum的值超了int的范围
for (int i = 0; i < a.length(); i++)
{
sum += c[i] * pow(16, i);//这简化转的过程 如上八进制的计算
}
cout << sum << endl;
return 0;
}