应该都会什么十进制转八进制转二进制(十进制以下),但是怎么呢转十六进制呢?用十六进制转八进制,转十进制,那就比平常的麻烦多了。
先讨论怎么用十进制转十进制以下的数,很简单就是用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;
}
或许会有不足,谢谢!
欢迎多提意见!