zoukankan      html  css  js  c++  java
  • 随手练——十六进制转八进制 (不限制长度)

    网上找了下,好像没有可以从十六进制直接转换到八进制的方法,一般就是转换成10进制或者2进制,再转换成8进制。

    分两种情况,如果结果较小的话,用int、long long能装得下的情况下,用16→10→8比较方便:

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <string>
    using namespace std;
    int to_10_system(string s) {
        int res = 0, k = 0;
        reverse(s.begin(), s.end());
        for (int i = 0; i < s.length(); i++) {
            if (s[i] >= 'A'&&s[i] <= 'F') {
                switch (s[i]) {
                case 'A':
                    res += pow(16, k++) * 10;
                        break;
                case 'B':
                    res += pow(16, k++) * 11;
                    break;
                case 'C':
                    res += pow(16, k++) * 12;
                    break;
                case 'D':
                    res += pow(16, k++) * 13;
                    break;
                case 'E':
                    res += pow(16, k++) * 14;
                    break;
                case 'F':
                    res += pow(16, k++) * 15;
                    break;
                }
            }
            else {
                res += (s[i] - '0')*pow(16, k++);
            }
        }
        return res;
    }
    int to_8_system(int x) {
        int res = 0, i = 0;
        while (x) {
            res += (x % 8)*pow(10, i++);
            x /= 8;
        }
        return res;
    }
    int main() {
        
        int n;
        cin >> n;
        while (n--) {
            string s;
            cin >> s;
            cout << to_8_system(to_10_system(s))<<endl;
        }
        return 0;
    }

    如果数据特别长的话,只能用字符串装的时候,还是16→2→8方便:

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <string>
    
    using namespace std;
    string to_2_system(string s) {
        string res;
        int k = 0;
        for (int i = 0; i < s.length(); i++) {
            string t;
            //这里偷了个懒 *_*
                switch (s[i]) {
                case '0':
                    t = "0000";break;
                case '1':
                    t = "0001";break;
                case '2':
                    t = "0010";break;
                case '3':
                    t = "0011";break;
                case '4':
                    t = "0100";break;
                case '5':
                    t = "0101";break;
                case '6':
                    t = "0110";break;
                case '7':
                    t = "0111";break;
                case '8':
                    t = "1000";break;
                case '9':
                    t = "1001";break;
                case 'A':
                    t = "1010";break;
                case 'B':
                    t = "1011";break;
                case 'C':
                    t = "1100";break;
                case 'D':
                    t = "1101";break;
                case 'E':
                    t = "1110";break;
                case 'F':
                    t = "1111";break;
                }
                res += t;
        }
        while (res.length() % 3 != 0) {
            res.insert(res.begin(), '0');
        }
        return res;
    }
    
    string to_8_system(string s) {
        string res;
        for (int i = s.length() - 1; i >= 0; i -= 3) {
            int t = s[i] - '0' + (s[i - 1] - '0') * 2 + (s[i - 2] - '0') * 4;
            if (!(i == 2 && t == 0))
            res += t + '0';
        }
        reverse(res.begin(), res.end());
        return res;
    }
    int main() {
        
        int n;
        cin >> n;
        while (n--) {
            string s;
            cin >> s;
            cout << to_8_system(to_2_system(s))<<endl;
        }
        return 0;
    }
  • 相关阅读:
    ps -aux --sort -rss |head 列出进程拿物理内存占用排序 使用ps aux 查看系统进程时,第六列即 RSS列显示的就是进程使用的物理内存。
    13 memcache服务检查
    shell 颜色
    expr判断整数是相加的值,返回命令的返回值$? 是0,但是少数情况是1,例如1 + -1 ,$? 的结果是1 ,判断要大于1最准确
    ZABBIX监控原理
    ansible分发密钥
    再来一个expect脚本
    11:菜单自动化软件部署经典案例
    19:批量检查多个网站地址是否正常
    数组迭代
  • 原文地址:https://www.cnblogs.com/czc1999/p/10381778.html
Copyright © 2011-2022 走看看