十六进制转八进制

十六进制转八进制

心得

看到题目,我想到的是。。。这。。。
然后我仔细想了想,我的确不会进制的转换,别说转换,就连是什么都不是特别了解
然后就花了一些时间去学,别说,度娘是真的香
总之,我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 ;
}
posted @ 2021-07-12 22:37  柏阳光菜菜  阅读(431)  评论(0)    收藏  举报