Fork me on GitHub
打赏

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

一、十六进制转十进制

问题描述
  从键盘输入一个不超过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);
    }
}
C语言

 

#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; 
}
C++

 

三、十进制转十六进制

问题描述
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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;
}

 

posted @ 2018-03-13 18:59  Zoctopus_Zhang  阅读(1732)  评论(0编辑  收藏  举报
// function btn_donateClick() { var DivPopup = document.getElementById('Div_popup'); var DivMasklayer = document.getElementById('div_masklayer'); DivMasklayer.style.display = 'block'; DivPopup.style.display = 'block'; var h = Div_popup.clientHeight; with (Div_popup.style) { marginTop = -h / 2 + 'px'; } } function MasklayerClick() { var masklayer = document.getElementById('div_masklayer'); var divImg = document.getElementById("Div_popup"); masklayer.style.display = "none"; divImg.style.display = "none"; } setTimeout( function () { document.getElementById('div_masklayer').onclick = MasklayerClick; document.getElementById('btn_donate').onclick = btn_donateClick; var a_gzw = document.getElementById("guanzhuwo"); a_gzw.href = "javascript:void(0);"; $("#guanzhuwo").attr("onclick","follow('33513f9f-ba13-e011-ac81-842b2b196315');"); }, 900);