zoukankan      html  css  js  c++  java
  • 蓝桥杯题库基础练习:进制转换

    一、十六进制转十进制

    问题描述
      从键盘输入一个不超过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] != ''; ++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("
    ");
    }
    
    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] = {''};
        char brr[400001] = {''};
        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
    ",brr);
            memset(arr,'',(sizeof(char)*200001));
            memset(brr,'',(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("");
        printf("
    ");
    }
    
    //将十六进制数转换为十进制数
    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;
    }
  • 相关阅读:
    如何查看python的notebook文件.ipynb
    pip3与pyttsx3文字语音转换
    Python字符乱码
    python3的urllib以及urllib2的报错问题
    python人脸对比
    Python 爬取qqmusic音乐url并批量下载
    稳定排序和不稳定排序
    Linux信号、信号处理和信号处理函数
    jQuery ajax表单提交
    Django setting 常用配置
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/8419835.html
Copyright © 2011-2022 走看看