十进制转八进制
a%8得到一个位数 将位数乘10相加 再a/8 直到a=0
int x=1;
while(a!=0)
{
int w=a%8;
res+=w*x;
x*=10;
a/=8;
}
十进制转十六进制
a%16得到一个位数 将位数转化为字符 再a/16 直到a=0
string sum;
if(a==0) sum='0';
while(a!=0)
{
int w=a%16;
if(w<10)
{
char ch=(char)('0'+w);
sum+=ch;
}else
{
switch(w)
{
case 10:sum+='A';break;
case 11:sum+='B';break;
case 12:sum+='C';break;
case 13:sum+='D';break;
case 14:sum+='E';break;
case 15:sum+='F';break;
}
}
a/=16;
}
reverse(sum.begin(),sum.end());
十六进制转十进制
先将字符串反转 再遍历每一位字符得到数字i 然后加16的i次方
reverse(s.begin(),s.end());
for(int i=0;i<s.length();i++)
{
if(s[i]=='A'||s[i]=='B'||s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='F')
{
switch(s[i])
{
case 'A': n+=10*pow(16,i);break;
case 'B': n+=11*pow(16,i);break;
case 'C': n+=12*pow(16,i);break;
case 'D': n+=13*pow(16,i);break;
case 'E': n+=14*pow(16,i);break;
case 'F': n+=15*pow(16,i);break;
}
}else
{
n+= (s[i]-'0') * pow(16,i);
}
八进制转十进制
string s;
reverse(s.begin(),s.end());
for(int i=0;i<s.length();i++)
{
n+= (s[i]-'0') * pow(8,i);
}