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
     
     
    【思路】 每3位16进制对应4位8进制  所以 每3位16进制将它化为十进制在把这个数按八进制的格式输出
     
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char s[1000002];
    int d[100];
    int get(char x)
    {
        if(x>='0'&&x<='9')
            return x-'0';
        else if(x>='a'&&x<='f')
            return x-'a'+10;
        else if(x>='A'&&x<='F')
            return x-'A'+10;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
    
        while(t--)
        {
            scanf("%s",s);  getchar();
            int len;
            len=strlen(s);
            int p;
            p=len%3;
            int sum=0;
            int f=1;
            for(int i=p-1; i>=0; i--)
            {
                sum+=get(s[i])*f;
                f*=16;
            }
            int flag=0;
            if(sum)
            {
                printf("%o",sum);
                flag=1;
            }
            for(int i=p; i<len; i+=3)
            {
                sum=0;
                f=1;
                for(int k=2; k>=0; k--)
                {
                    sum+=get(s[i+k])*f;
                    f*=16;
                }
                if(sum)
                {
                    printf("%04o",sum);                //!!!这里注意了
                    flag=1;
                }
                else if(flag)
                    printf("0000");
    
            }
            printf("
    ");
        }
        return 0;
    }
     
  • 相关阅读:
    [USACO11JAN]Roads and Planes G【缩点+Dij+拓补排序】
    Cheatsheet: 2015 05.01 ~ 05.31
    Cheatsheet: 2015 04.01 ~ 04.30
    Cheatsheet: 2015 03.01 ~ 03.31
    Cheatsheet: 2015.02.01 ~ 02.28
    Cheatsheet: 2015 01.01~ 01.31
    Cheatsheet: 2014 12.01 ~ 12.31
    Cheatsheet: 2014 11.01 ~ 11.30
    Cheatsheet: 2014 10.01 ~ 10.30
    Cheatsheet: 2014 09.01 ~ 09.30
  • 原文地址:https://www.cnblogs.com/assult/p/3613459.html
Copyright © 2011-2022 走看看