zoukankan      html  css  js  c++  java
  • 十六进制转八进制

    十六进制至八进制的转换要借用二进制作为跳板,即将十六进制先转换为二进制,再将转换过的二进制数转换为八进制。

    原理还是很简单的,每1位十六进制数可对应4位二进制数,每1位八进制数可对应3位二进制数(因为7的二进制为111)。

    其中有一点需要注意的就是当十六进制所转换的二进制数位不能被3整除时需要在串首加1或2个“0”以确保可以完整地转换为八进制。

    尽量使用字符串来储存以确保储存空间。

    实行代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[10000010];//储存八进制数 
     4 
     5 int main(){
     6     int n;
     7     string str,str2;
     8     cin>>n;
     9     while(n--){
    10         cin>>str;
    11         int len=str.size();
    12         str2="";
    13         for(int i=0;i<len;i++){//将十六进制转换为二进制 
    14             if(str[i]=='1'){
    15                 str2+="0001";
    16                 continue;
    17             }
    18             if(str[i]=='0'){
    19                 str2+="0000";
    20                 continue;
    21             }
    22             if(str[i]=='2'){
    23                 str2+="0010";
    24                 continue;
    25             }if(str[i]=='3'){
    26                 str2+="0011";
    27                 continue;
    28             }
    29             if(str[i]=='4'){
    30                 str2+="0100";
    31                 continue;
    32             }
    33             if(str[i]=='5'){
    34                 str2+="0101";
    35                 continue;
    36             }
    37             if(str[i]=='6'){
    38                 str2+="0110";
    39                 continue;
    40             }
    41             if(str[i]=='7'){
    42                 str2+="0111";
    43                 continue;
    44             }
    45             if(str[i]=='8'){
    46                 str2+="1000";
    47                 continue;
    48             }
    49             if(str[i]=='9'){
    50                 str2+="1001";
    51                 continue;
    52             }
    53             if(str[i]=='A'){
    54                 str2+="1010";
    55                 continue;
    56             }
    57             if(str[i]=='B'){
    58                 str2+="1011";
    59                 continue;
    60             }
    61             if(str[i]=='C'){
    62                 str2+="1100";
    63                 continue;
    64             }
    65             if(str[i]=='D'){
    66                 str2+="1101";
    67                 continue;
    68             }
    69             if(str[i]=='E'){
    70                 str2+="1110";
    71                 continue;
    72             }
    73             if(str[i]=='F'){
    74                 str2+="1111";
    75                 continue;
    76             }
    77         }
    78         if(len%3==2)//补位 
    79         str2="0"+str2;
    80         else if(len%3==1)
    81         str2="00"+str2;
    82         len=str2.size();
    83         int j=0;
    84         for(int i=0;i<=len-2;i+=3){//将二进制转换为八进制 
    85             a[j]=(str2[i]-'0')*4+(str2[i+1]-'0')*2+(str2[i+2]-'0');
    86             j++;
    87         }
    88         for(int i=0;i<j;i++){//输出八进制数 
    89             if(i==0&&a[i]==0)//如含前导零则略掉 
    90             continue;
    91             cout<<a[i];
    92         }
    93         cout<<endl;
    94     }
    95     return 0;
    96 }
  • 相关阅读:
    【Coreforces 1253E】
    计数专题乱做
    PKUWC2020乱做
    多项式板子
    notepad
    2021.4.9
    2021.4.8
    2021.3.31
    2021.3.26
    2021.3.25
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/6421561.html
Copyright © 2011-2022 走看看