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

    问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。

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

    输出格式
      输出n行,每行为输入对应的八进制正整数。

      【注意
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

    题解

      解题操之过急,未把各种情况考虑清楚,修改了很久,希望不要再这样。

    #include <iostream>
    #include <cstdio>
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    #include <stdlib.h>
    #include <string.h>
    #include <cmath>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main(){
        int n;
        string str[10];
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            cin>>str[i];
            string bin;
            string oct;
            for(int j=0;j<str[i].length();j++){
                switch(str[i][j]){
                    case '0':bin+="0000";break;
                    case '1':bin+="0001";break;
                    case '2':bin+="0010";break;
                    case '3':bin+="0011";break;
                    case '4':bin+="0100";break;
                    case '5':bin+="0101";break;
                    case '6':bin+="0110";break;
                    case '7':bin+="0111";break;
                    case '8':bin+="1000";break;
                    case '9':bin+="1001";break;
                    case 'A':bin+="1010";break;
                    case 'B':bin+="1011";break;
                    case 'C':bin+="1100";break;
                    case 'D':bin+="1101";break;
                    case 'E':bin+="1110";break;
                    case 'F':bin+="1111";break;
                }
            }
            int leng = bin.length() % 3;
            if(leng != 0){
                string t = bin.substr(0,leng);
                if(t == "1")
                    oct += "1";
                else if (t == "10")
                    oct += "2";
                else if (t == "11")
                    oct += "3";
                else if(t=="01")
                    oct += "1"; 
            }
            if(bin.substr(leng,3) == "000")
                leng+=3; 
            for(long long j = leng;j<bin.length();j+=3){
                string t = bin.substr(j,3);
                if(t == "000")
                    oct += "0";
                else if (t == "001")
                    oct += "1";
                else if(t == "010")
                    oct += "2";
                else if(t =="011")
                    oct += "3";
                else if(t =="100")
                    oct += "4";
                else if(t =="101")
                    oct += "5";
                else if(t == "110")
                    oct += "6";
                else if(t== "111")
                    oct += "7";
            }
            cout<<oct<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Mac从零配置Vim
    Mac效率:配置Alfred web search
    看看你的邻居在干什么
    成功破解邻居的Wifi密码
    MacBook安装Win10
    C陷阱:求数组长度
    Nexus 6P 解锁+TWRP+CM
    搭建树莓派手机远程开门系统
    Ubuntu下配置ShadowS + Chrome
    JS传参出现乱码(转载)
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10312064.html
Copyright © 2011-2022 走看看