十六进制转八进制

  应该都会什么十进制转八进制转二进制(十进制以下),但是怎么呢转十六进制呢?用十六进制转八进制,转十进制,那就比平常的麻烦多了。

  先讨论怎么用十进制转十进制以下的数,很简单就是用While语句一步步的存到数组里,下面是伪代码

cin>>n;//读入
int a[10000];
int i=0;
while(n!=0)
{
  i++;
  a[i]=n%要转的进制
  n=n/要转的进制
}
for(int j=i;j>=1;j--)//输出
  cout<<a[j];//注意要倒着输出
return 0;

  但是十六进制转八进制呢?也这样做?那一定行不通,为什么?因为十六进制有字母(A表示11,B表示12.......F表示15)那怎么做呢?

  下面是思路微笑

 

1:把十六进制转成二进制

2,进行填0去0

3,把他转成八进制

一步一步做

No.1大笑


 

十六进制怎么转八进制呢?

就是用下面的方法:

先一步步的转换(意思就是一个一个数字转)

 

0 0000 
1 0001 
2 0010 
3 0011 
4 0100 
5 0101 
6 0110 
7 0111 
8 1000 
9 1001 
A 1010 
B 1011 
C 1100 
D 1101 
E 1110 
F 1111 
1 0001 
2 0010 
3 0011 
4 0100 
5 0101 
6 0110 
7 0111 
8 1000 
9 1001 
A 1010 
B 1011 
C 1100 
D 1101 
E 1110 
F 1111 

是不是会打死(大哭打这题的时候我也很绝望呀)

伪代码(我辛辛苦苦打的,为了不让你们复制粘贴,大笑

 

 

string s=0;
cin>>s//读入
int z=0;
int a[100000];
if(s[p]=='0'){a[++z]=0,a[++z]=0,a[++z]=0;a[++z]=0;}
      else if(s[p]=='1'){a[++z]=0;a[++z]=0;a[++z]=0;a[++z]=1;}
             else if(s[p]=='2'){a[++z]=0;a[++z]=0;a[++z]=1;a[++z]=0;}
                    else if(s[p]=='3'){a[++z]=0;a[++z]=0;a[++z]=1;a[++z]=1;}
                           else if(s[p]=='4'){a[++z]=0;a[++z]=1;a[++z]=0;a[++z]=0;}
                                  else if(s[p]=='5'){a[++z]=0;a[++z]=1;a[++z]=0;a[++z]=1;}
                                         else if(s[p]=='6'){a[++z]=0;a[++z]=1;a[++z]=1;a[++z]=0;}
                                                else if(s[p]=='7'){a[++z]=0;a[++z]=1;a[++z]=1;a[++z]=1;}
                                                       else if(s[p]=='8'){a[++z]=1;a[++z]=0;a[++z]=0;a[++z]=0;}
                                                              else if(s[p]=='9'){a[++z]=1;a[++z]=0;a[++z]=0;a[++z]=1;}
                                                                     else if(s[p]=='A'){a[++z]=1;a[++z]=0;a[++z]=1;a[++z]=0;}
                                                                            else if(s[p]=='B'){a[++z]=1;a[++z]=0;a[++z]=1;a[++z]=1;}
                                                                                  else if(s[p]=='C'){a[++z]=1;a[++z]=1;a[++z]=0;a[++z]=0;}
                                                                                         else if(s[p]=='D'){a[++z]=1;a[++z]=1;a[++z]=0;a[++z]=1;}
                                                                                              else if(s[p]=='E'){a[++z]=1;a[++z]=1;a[++z]=1;a[++z]=0;}
                                                                                                     else if(s[p]=='F'){a[++z]=1;a[++z]=1;a[++z]=1;a[++z]=1;}  

  (大哭我的代码!!!!)

或许用case会更好,但是我没用(也好不到哪去)

现在存起来了第二步

No.2

大家有没有想到过,转成二进制后,并不是3的倍数(因为二进制转八进制时要3个三个的转),怎么办?

很简单

先把z(a这个数组从2开始记)弄成1,

让后判断是不是三的倍数,如果不是,就在前面填0,

去0

如果有三个0,就用一个布尔类型判断便可

不发代码了

No.3

 

八进制怎么转二·进制呢?

就是用下面的方法:

先一步步的转换(意思就是一个一个数字转)

0 000 
1 001 
2 010 
3 011 
4 100 
5 101 
6 110 
7 111 
1 001 
2 010 
3 011 
4 100 
5 101 
6 110 
7 111 

是不是会打死(大哭打这题的时候我也很绝望呀)

伪代码(我辛辛苦苦打的,为了不让你们复制粘贴,大笑

 

 

int y=1;
void er()
{
	if(a[y]==0&&a[y+1]==0&&a[y+2]==0){if(l!=false)cout<<0;}
	else {if(a[y]==0&&a[y+1]==0&&a[y+2]==1)cout<<1;
	       else {if(a[y]==0&&a[y+1]==1&&a[y+2]==0)cout<<2;
	              else {if(a[y]==0&&a[y+1]==1&&a[y+2]==1)cout<<3;
	                     else {if(a[y]==1&&a[y+1]==0&&a[y+2]==0)cout<<4;
	                            else {if(a[y]==1&&a[y+1]==0&&a[y+2]==1)cout<<5;
	                                   else {if(a[y]==1&&a[y+1]==1&&a[y+2]==0)cout<<6;
									          else cout<<7;
									      }
									}
								}
							}
						}
			l=true;
					}
    y+=3;
}

 (大哭我的代码!!!!)

或许用case会更好,但是我没用(也好不到哪去)

好了终于写完了

上代码!!!!

#include<bits/stdc++.h>
using namespace std;
string s;int a[1000000],z=1;
void ba(int p)
{
	if(s[p]=='0'){a[++z]=0,a[++z]=0,a[++z]=0;a[++z]=0;}
      else if(s[p]=='1'){a[++z]=0;a[++z]=0;a[++z]=0;a[++z]=1;}
             else if(s[p]=='2'){a[++z]=0;a[++z]=0;a[++z]=1;a[++z]=0;}
                    else if(s[p]=='3'){a[++z]=0;a[++z]=0;a[++z]=1;a[++z]=1;}
                           else if(s[p]=='4'){a[++z]=0;a[++z]=1;a[++z]=0;a[++z]=0;}
                                  else if(s[p]=='5'){a[++z]=0;a[++z]=1;a[++z]=0;a[++z]=1;}
                                         else if(s[p]=='6'){a[++z]=0;a[++z]=1;a[++z]=1;a[++z]=0;}
                                                else if(s[p]=='7'){a[++z]=0;a[++z]=1;a[++z]=1;a[++z]=1;}
                                                       else if(s[p]=='8'){a[++z]=1;a[++z]=0;a[++z]=0;a[++z]=0;}
                                                              else if(s[p]=='9'){a[++z]=1;a[++z]=0;a[++z]=0;a[++z]=1;}
                                                                     else if(s[p]=='A'){a[++z]=1;a[++z]=0;a[++z]=1;a[++z]=0;}
                                                                            else if(s[p]=='B'){a[++z]=1;a[++z]=0;a[++z]=1;a[++z]=1;}
                                                                                  else if(s[p]=='C'){a[++z]=1;a[++z]=1;a[++z]=0;a[++z]=0;}
                                                                                         else if(s[p]=='D'){a[++z]=1;a[++z]=1;a[++z]=0;a[++z]=1;}
                                                                                              else if(s[p]=='E'){a[++z]=1;a[++z]=1;a[++z]=1;a[++z]=0;}
                                                                                                     else if(s[p]=='F'){a[++z]=1;a[++z]=1;a[++z]=1;a[++z]=1;}     
//cout<<a[z-3]<<a[z-2]<<a[z-1]<<a[z];
}
bool l=false;
int y=1;
void er()
{
	if(a[y]==0&&a[y+1]==0&&a[y+2]==0){if(l!=false)cout<<0;}
	else {if(a[y]==0&&a[y+1]==0&&a[y+2]==1)cout<<1;
	       else {if(a[y]==0&&a[y+1]==1&&a[y+2]==0)cout<<2;
	              else {if(a[y]==0&&a[y+1]==1&&a[y+2]==1)cout<<3;
	                     else {if(a[y]==1&&a[y+1]==0&&a[y+2]==0)cout<<4;
	                            else {if(a[y]==1&&a[y+1]==0&&a[y+2]==1)cout<<5;
	                                   else {if(a[y]==1&&a[y+1]==1&&a[y+2]==0)cout<<6;
									          else cout<<7;
									      }
									}
								}
							}
						}
			l=true;
					}
    y+=3;
}
int main()
{
	cin>>s;
	for(int i=0;i<=s.size()-1;i++)
	  ba(i);
	int o=2;
	if((z-1)%3==1)a[1]=0,a[0]=0,o=0;
	if((z-1)%3==2)a[1]=0,o=1;
	//cout<<endl;
	//cout<<y<<endl;
	y=o;
	//for(int i=y;i<=z;i++)
	  //cout<<a[i];
	//cout<<endl;
	for(int i=1;i<=(z-o+1)/3;i++)
	  er(); 
	if(s[0]=='0')cout<<0;
	return 0;
}

  或许会有不足,谢谢!

  欢迎多提意见!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值