美文网首页
基础练习-十六进制转八进制

基础练习-十六进制转八进制

作者: 嘉敏的豆子 | 来源:发表于2018-03-20 20:43 被阅读0次

    题目要求

    输入的第一行为一个正整数n (1<=n<=10)
    接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000

    解题过程

    这个题想了很久,知道16进制就是加四位,算八进制就是提出三位来,但是我写的时候吧这个加了一个算十进制的过程,所以当输入的十六进制数特别特别大的时候,这个时候是没办法在转变为十进制数的。
    这个是网上学习的代码,先记录下来吧。

    #include <stdio.h>
    #include <iostream>
    #include <cmath>
    #include <string>
    using namespace std;
    typedef long long ll;
    int main(){
        int n;
        cin>>n;
        string s1[12],s2[12];
        for(int i = 0;i<n;i++){
            cin>>s1[i];
        }
        for(int i = 0;i<n;i++){
            s2[i]="";
            for(int j = 0;j<s1[i].length();j++){
                switch (s1[i][j]) {
                    case '0' : s2[i] += "0000"; break;
                    case '1' : s2[i] += "0001"; break;
                    case '2' : s2[i] += "0010"; break;
                    case '3' : s2[i] += "0011"; break;
                    case '4' : s2[i] += "0100"; break;
                    case '5' : s2[i] += "0101"; break;
                    case '6' : s2[i] += "0110"; break;
                    case '7' : s2[i] += "0111"; break;
                    case '8' : s2[i] += "1000"; break;
                    case '9' : s2[i] += "1001"; break;
                    case 'A' : s2[i] += "1010"; break;
                    case 'B' : s2[i] += "1011"; break;
                    case 'C' : s2[i] += "1100"; break;
                    case 'D' : s2[i] += "1101"; break;
                    case 'E' : s2[i] += "1110"; break;
                    case 'F' : s2[i] += "1111"; break;
                    default:
                        break;
                }
            }
            if(s2[i].length()%3==1) s2[i] = "00" + s2[i];
            else if(s2[i].length()%3==2) s2[i] = "0" + s2[i];
            int flag = 0;
            for(int j = 0;j<=s2[i].length()-3;j+=3){
                int num = 4*(s2[i][j]-'0')+2*(s2[i][j+1]-'0')+(s2[i][j+2]-'0');
                if(num) flag = 1;
                if(flag) cout<<num;
            }
            cout<<endl;
        }
        
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:基础练习-十六进制转八进制

          本文链接:https://www.haomeiwen.com/subject/lxhiqftx.html