首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝桥杯题库基础练习:进制转换

蓝桥杯题库基础练习:进制转换

作者头像
Zoctopus
发布2018-06-04 11:37:45
1K0
发布2018-06-04 11:37:45
举报

一、十六进制转十进制

问题描述   从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。   注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535

分析:按16进制展开;按数位依次操作,每次将前面的乘16,再加上当前数位的值。

C语言代码

#include<stdio.h>  
#include<string.h>  
#include<math.h>  
int main(){  
     char strHex[10]; //设定字符串长度 
     int i = 0, len = 0, temp = 0;  
     long long answer = 0;  
     gets(strHex);  
     len = strlen(strHex);  
     for (i = 0; strHex[i] != '\0'; ++i){  
         switch(strHex[i]){  
             case 'A': temp = 10; break;  
             case 'B': temp = 11; break;  
             case 'C': temp = 12; break;  
             case 'D': temp = 13; break;  
             case 'E': temp = 14; break;  
             case 'F': temp = 15; break;  
             default: temp = strHex[i]-'0'; break;  
         }  
         answer += (temp*pow(16,len-1-i));  //pow函数作用:计算x的 y次方 
     }  
     printf("%lld",answer);  
     return 0;  
}

C++代码

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    while(cin>>s)
    {
        int leth=s.length();
        long long sum=0;
        for(int i = 0;i < leth;i++)
        {
            if(s[i]>='A' && s[i]<='F')
                sum=sum*16 + s[i]-'A'+10;
            else
                sum=sum*16 + s[i]-'0';
        }
        cout<<sum<<endl;
    }
    return 0;
}

二、十六进制转八进制

问题描述   给定n个十六进制正整数,输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n (1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式   输出n行,每行为输入对应的八进制正整数。 注意   输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。 样例输入 2 39 123ABC 样例输出 71 4435274 提示   先将十六进制数转换成某进制数,再由某进制数转换成八进制。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MaxSize 100000

void saveB(char *b,char c3,char c2,char c1,char c0,int start)
{
    b[start]=c3;
    b[start+1]=c2;
    b[start+2]=c1;
    b[start+3]=c0;
}
int htob(char *h,char *b)
{
    int i,j;
    int hl=strlen(h);
    for(i=0;i<hl;i++)
        switch(h[i])
        {
            case '0':
                {
                    saveB(b,'0','0','0','0',4*i);
                    break;
                }
            case '1':
                {
                    saveB(b,'0','0','0','1',4*i);
                    break;
                }
            case '2':
                {
                    saveB(b,'0','0','1','0',4*i);
                    break;
                }
            case '3':
                {
                    saveB(b,'0','0','1','1',4*i);
                    break;
                }
            case '4':
                {
                    saveB(b,'0','1','0','0',4*i);
                    break;
                }
            case '5':
                {
                    saveB(b,'0','1','0','1',4*i);
                    break;
                }
            case '6':
                {
                    saveB(b,'0','1','1','0',4*i);
                    break;
                }
            case '7':
                {
                    saveB(b,'0','1','1','1',4*i);
                    break;
                }
            case '8':
                {
                    saveB(b,'1','0','0','0',4*i);
                    break;
                }
            case '9':
                {
                    saveB(b,'1','0','0','1',4*i);
                    break;
                }
            case 'A':
                {
                    saveB(b,'1','0','1','0',4*i);
                    break;
                }
            case 'B':
                {
                    saveB(b,'1','0','1','1',4*i);
                    break;
                }
            case 'C':
                {
                    saveB(b,'1','1','0','0',4*i);
                    break;
                }
            case 'D':
                {
                    saveB(b,'1','1','0','1',4*i);
                    break;
                }
            case 'E':
                {
                    saveB(b,'1','1','1','0',4*i);
                    break;
                }
            case 'F':
                {
                    saveB(b,'1','1','1','1',4*i);
                    break;
                }
        }
    return 4*hl;
}

int btoo(char *b,char *o,int bl)
{
    int i,j;
    int ol;
    int value;
    if(bl%3==0)
        ol=bl/3;
    else
        ol=bl/3+1;
    j=bl-1;
    for(i=ol-1;i>=0;i--)
    {
        if(i>0)
            o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;
        else
        {
            switch(j)
            {
                case 2:
                    o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;
                    break;
                case 1:
                    o[i]=b[j]-48+(b[j-1]-48)*2+48;
                    break;
                case 0:
                    o[i]=b[j];
                    break;
            }

        }
        j=j-3;
    }
    return ol;
}
void printO(char *o,int ol)
{
    int i=0;
    if(o[0]=='0')
        i=1;
    for(;i<ol;i++)
    {
        printf("%c",o[i]);
    }
    printf("\n");
}

main()
{
    char h[MaxSize];
    char b[4*MaxSize];
    char o[4*MaxSize/3+1];
    int n,i,bl,ol;
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
    {
        gets(h);
        bl=htob(h,b);
        ol=btoo(b,o,bl);
        
        printO(o,ol);
    }
}
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <STDLIB.H>

int GetI(char c)
{
    return c>>4&1?c&15:(c&15)+9; 
}

int main(int argc, char *argv[]) {
    char arr[200001] = {'\0'};
    char brr[400001] = {'\0'};
    int n = 0;
    int i = 0;
    scanf("%d",&n);

    for(i = 0;i < n;i++)
    {
        scanf("%s",arr);
        int m[3] = {1,16,256};
        int len = strlen(arr);
        int j = len-1;
        int a,b,c;
        a = b = c = 0;
        int k = 0,l = 0;
        int count = 0;
        while(j>-1)
        {

            a += (arr[j]>>4&1?arr[j]&15:(arr[j]&15)+9)*m[k]; //个位
            if(k==2||j==0)
            {
                while(a)
                {
                    brr[l++] = ((a&7)|48);
                    a = a>>3;
                    count++;
                }
                while(j!=0&&count<4)
                {
                    brr[l++] = '0';
                    count++;
                }
                count = 0;
            }
            k = (k+1)%3;
            j--;
        }
        strrev(brr);
        printf("%s\n",brr);
        memset(arr,'\0',(sizeof(char)*200001));
        memset(brr,'\0',(sizeof(char)*400001));
    }
    
    return 0; 
}

三、十进制转十六进制

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

#include <stdio.h>
#include <stdlib.h>
char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};    
void Print(char *num,int n)
{
    int i;
    for(i=n-1;i>=0;i--) 
        printf("%c",num[i]);
    printf("\0");
    printf("\n");
}

//将十六进制数转换为十进制数
int Transform(char *num,long long value)
{
    int n=0;
    while(value>=16)
    {
        num[n++]=data[value%16];
       value/=16;
    }
        num[n++]=data[value%16];
    return n;
}
    
int main()
{
    long long value;
    char num[10];
    int n;
    scanf("%I64d",&value);
    n=Transform(num,value);
    Print(num,n);
    
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、十六进制转十进制
  • 二、十六进制转八进制
  • 三、十进制转十六进制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档