• 十六进制转八进制 蓝桥杯


    Description

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

    Input

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

    Output

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

    Sample Input

    2
    39
    123ABC

    Sample Output

    71
    4435274

    Hint

    提示
    先将十六进制数转换成某进制数,再由某进制数转换成八进制。

    Source

    蓝桥杯
     
    先将十六进制转化成二进制,再将二进制转化成八进制,开始在转化成八进制的时候没有判断最后只剩两位或者一位的情况导致WA几次。。。。
     
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cstdlib>
    #include<queue>
    #include<cmath>
    #include<algorithm>
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    int s2[10000000],tmp[10000000];
    int main() {
        int T;
        cin >> T;
        while( T -- ) {
            int n = 0, j = 0;
            string s1;
            cin >> s1;
            memset( s2, 0, sizeof(s2) );
            memset( tmp, 0, sizeof(tmp) );
            for( int i = s1.length()-1; i >= 0 ; i -- ) {
                int t, k = s1.length() - i - 1;
                if( s1[i] >= 'A' && s1[i] <= 'F' ) {
                    t = s1[i] - 'A' + 10;
                } else {
                    t = s1[i] - '0';
                }
                int cnt = 0;
                //debug(t);
                while( t ) {
                    if( t % 2 == 1 ) {
                        if( j < 4*k+cnt ) {
                            j = 4*k+cnt;
                        }
                    }
                    s2[4*k+cnt] = t % 2;
                    t /= 2;
                    cnt ++;
                }
            }
            int k = 0;
            for( int i = 0; i <= j; i ++ ) {
                if( ( i + 1) % 3 == 0 ) {
                    tmp[k++] = s2[i]*4 + s2[i-1]*2 + s2[i-2];
                } else if( i == j ) {
                    if( ( i + 1) % 3 == 2 ) {
                        tmp[k++] = s2[i]*2 + s2[i-1];
                    } else if( ( i + 1 ) % 3 == 1 ) {
                        tmp[k++] = s2[i];
                    }
                }
            }
            for( int i = k-1; i >= 0; i -- ) {
                cout << tmp[i];
            }
            cout << endl;
        }
        return 0 ;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    几个可以用到的正则表达式
    apache fileupload 文件上传,及文件进度设置获取
    Log4j日志根据配置输出到多个自定义文件
    spring3.2.2 remoting HTTP invoker 实现方式
    希望自己坚持住!
    tomcat线程一直处于RUNNABLE,不接受请求
    OM—>AR相关会计科目
    css画图
    Jquery 实现原理之 Ajax
    HTML、XHTML和HTML5区别与联系
  • 原文地址:https://www.cnblogs.com/l609929321/p/8530889.html
Copyright © 2020-2023  润新知