• 【蓝桥杯】 基础练习 十六进制转八进制


     基础练习 十六进制转八进制  
    时间限制:1.0s   内存限制:512.0MB
          
    问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。
    输入格式
      输入的第一行为一个正整数n (1<=n<=10)。
      接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
    输出格式
      输出n行,每行为输入对应的八进制正整数。
    注意
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。
    样例输入
    2
    39
    123ABC
    样例输出
    71
    4435274
    提示
      先将十六进制数转换成某进制数,再由某进制数转换成八进制。
     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 const int maxn=100000+10;
     5 char h[maxn],b[4*maxn],e[4*maxn];
     6 int main()
     7 {
     8     int n;
     9     scanf("%d",&n);
    10     while(n--)
    11     {
    12         scanf("%s",h);
    13         int len=0;
    14         for(int i=strlen(h)-1;i>=0;i--)//十六转二
    15         {
    16             int x;
    17             if(h[i]>='0'&&h[i]<='9')
    18                 x=h[i]-'0';
    19             else
    20             {
    21                 x=h[i]-'A'+10;
    22             }
    23             for(int j=0;j<4;j++)
    24             {
    25                 e[len++]=x%2+'0';
    26                 x/=2;
    27             }
    28         }
    29         e[len]='';
    30         int cnt=1,x=0,l=0;
    31         for(int i=0;i<len;i++)//二转八
    32         {
    33             if(cnt==4||i==len-1)
    34             {
    35                 x+=cnt*(e[i]-'0');
    36                 cnt=1;
    37                 b[l++]=x+'0';
    38                 x=0;
    39             }
    40             else
    41             {
    42                 x+=cnt*(e[i]-'0');
    43                 cnt*=2;
    44             }
    45         }
    46         int i=l-1;
    47         while(i>=0&&b[i]=='0')//去前导0
    48             i--;
    49         if(i<0)
    50             printf("0
    ");
    51         for(;i>=0;i--)
    52         {
    53             printf("%c",b[i]);
    54         }
    55         printf("
    ");
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    [Everyday Mathematics]20150226
    [Everyday Mathematics]20150225
    [Everyday Mathematics]20150224
    [Everyday Mathematics]20150223
    [Everyday Mathematics]20150222
    [Everyday Mathematics]20150221
    [Everyday Mathematics]20150220
    [Everyday Mathematics]20150219
    [Everyday Mathematics]20150218
    [Everyday Mathematic]20150217
  • 原文地址:https://www.cnblogs.com/wpnan/p/4095730.html
Copyright © 2020-2023  润新知