十六进制转八进制
十六进制转八进制
心得
看到题目,我想到的是。。。这。。。
然后我仔细想了想,我的确不会进制的转换,别说转换,就连是什么都不是特别了解
然后就花了一些时间去学,别说,度娘是真的香
总之,我jio得,这题比之前的题难了不止一个度。。。
然后理解了,但不是很会用,就去百度了,我jio得这位博主已经写的很完善了,再改也没什么意思了
点击跳转博主页面
还是把我理解的代码也放过来吧
难点
进制之间的转换还有进制的一些注意事项等
十六进制转换成二进制到不是很难理解,毕竟有点离散的知识
但是二进制转换成八进制就有一点点小坑,具体的。。。
看看度娘解释
点击跳转度娘解释
目前java还不是很会用,太丑了,也还有很多没改好,等补好再评论区见
#include <iostream>
#include <string>
using namespace std;
void main()
{
string s1,s2;
int n;
int i,j,k;
cin>>n;
for(i=0;i<n;i++)
{
cin>>s1;
s2="";
for(j=0;j<s1.length();j++)//用s1.length记住输入的数据的个数,然后再用下标查询法把十六进制的数转化成二进制
{
switch(s1[j])
{
case '0':s2+="0000";break;
case '1':s2+="0001";break;
case '2':s2+="0010";break;
case '3':s2+="0011";break;
case '4':s2+="0100";break;
case '5':s2+="0101";break;
case '6':s2+="0110";break;
case '7':s2+="0111";break;
case '8':s2+="1000";break;
case '9':s2+="1001";break;
case 'A':s2+="1010";break;
case 'B':s2+="1011";break;
case 'C':s2+="1100";break;
case 'D':s2+="1101";break;
case 'E':s2+="1110";break;
case 'F':s2+="1111";break;
default:break;
}
}
if(s2.length()%3==1)//用s2.length记住转化成二进制之后的数,在把s2转化成八进制,再输出,用取三合一法
s2="00"+s2;
if(s2.length()%3==2)
s2="0"+s2;
int flag=0;
for(k=0;k<s2.length()-2;k+=3)
{
int p=4*(s2[k]-'0')+2*(s2[k+1]-'0')+s2[k+2]-'0';//这个我理解为一个公式之类的,因为看的真的不是很懂
if(p)
flag=1;
if(flag)
cout<<p;
}
cout<<endl;
}
return ;
}

浙公网安备 33010602011771号