欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-15 08:43:23
...

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

试题 基础练习 十六进制转八进制 
资源限制
时间限制: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;
}