蓝桥杯基础练习-进制转换(十六进制转八进制+十六进制转十进制+十进制转十六进制)

蓝桥杯基础练习-进制转换(十六进制转八进制+十六进制转十进制+十进制转十六进制)
一、十六进制转八进制

试题 基础练习 十六进制转八进制 
资源限制
时间限制:1.0s   内存限制:512.0MB
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

AC代码:

#include<bits/stdc++.h>
using namespace std;
string a[16]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
string tran(char x)
{
    string cnt="";
    switch (x)
    {
        case '0':cnt+=a[0];break;
        case '1':cnt+=a[1];break;
        case '2':cnt+=a[2];break;
        case '3':cnt+=a[3];break;
        case '4':cnt+=a[4];break;
        case '5':cnt+=a[5];break;
        case '6':cnt+=a[6];break;
        case '7':cnt+=a[7];break;
        case '8':cnt+=a[8];break;
        case '9':cnt+=a[9];break;
        case 'A':cnt+=a[10];break;
        case 'B':cnt+=a[11];break;
        case 'C':cnt+=a[12];break;
        case 'D':cnt+=a[13];break;
        case 'E':cnt+=a[14];break;
        case 'F':cnt+=a[15];break;
        default:break;
    }
    return cnt;
}
int main(){
    int n;
    cin>>n;
    string str[11];
    for(int i=0;i<n;i++)
    {
        cin>>str[i];
        string ans=""; //存放二进制字符串
        int len=str[i].length();
        for(int j=0;j<len;j++)
        {
            ans+=tran(str[i][j]);
        }
        int len2=ans.length();
        if(len2%3==1)
        {
            ans="00"+ans;
        }
        else if(len2%3==2)
        {
            ans="0"+ans;
        }
        len2=ans.length();
        string cnt=""; //存放八进制字符串
        for(int j=0;j<len2;j+=3)
        {
            int k=(ans[j]-'0')*pow(2,2)+(ans[j+1]-'0')*pow(2,1)+(ans[j+2]-'0')*pow(2,0);
            cnt+=(k+'0');
        }
        cnt.erase(0,cnt.find_first_not_of('0'));
        cout<<cnt<<endl;
    }
 system("pause");
 return 0;
}

二、十六进制转十进制

试题 基础练习 十六进制转十进制  
资源限制
时间限制:1.0s   内存限制:512.0MB
问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535

AC代码:

#include<bits/stdc++.h>
using namespace std;
int tran(char x)
{
    int ans=0;
    switch(x)
    {
        case '0':ans=0;break;
        case '1':ans=1;break;
        case '2':ans=2;break;
        case '3':ans=3;break;
        case '4':ans=4;break;
        case '5':ans=5;break;
        case '6':ans=6;break;
        case '7':ans=7;break;
        case '8':ans=8;break;
        case '9':ans=9;break;
        case 'A':ans=10;break;
        case 'B':ans=11;break;
        case 'C':ans=12;break;
        case 'D':ans=13;break;
        case 'E':ans=14;break;
        case 'F':ans=15;break;
    }
    return ans;
}
int main(){
    string str;
    int a[100]={0};
    cin>>str;
    int len=str.length();
    long long int sum=0;
    for(int i=len-1;i>=0;i--)
    {
        sum+=tran(str[i])*pow(16,len-i-1);
    }
    cout<<sum<<endl;
    system("pause");
    return 0;
}

三、十进制转十六进制

试题 基础练习 十进制转十六进制
资源限制
时间限制:1.0s   内存限制:512.0MB
问题描述
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的015。十六进制的计数方法是满161,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。
输入格式
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
  输出这个整数的16进制表示
样例输入
30
样例输出
1E

AC代码:

#include<bits/stdc++.h>
using namespace std;
char a[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int main(){
    long long int n;
    cin>>n;
    long long int t=abs(n);
    string str="";
    if(t==0)
    {
        cout<<"0"<<endl;return 0;
    }
    while(t!=0)
    {
        int k=t%16;
        str=a[k]+str;
        t/=16;
    }
    cout<<str<<endl;
    //system("pause");
    return 0;
}

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页