蓝桥杯C语言 十六进制转八进制

简介: 蓝桥杯C语言 十六进制转八进制

十六进制转八进制

思路分析:

39十六进制先转换为4位二进制,3为0011,9为1001,所以39的二进制为00111001,又把二进制转化为3位八进制,从右边开始数,001为1,111为7,所以39的八进制为71。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#define MAX_SIZE 100000
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
  int n;      //十六进制数数量
  int i,j,k; // 计数变量 
  int result;
  int str_len;
  scanf("%d",&n);
  char str[n][MAX_SIZE];
  //建立数组,保存16个十六进制数对应的二进制数
  char demo[16][4] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
  memset(str,0,n*MAX_SIZE);  //将str初始化为0
  for(i=0;i<n;i++){
    scanf("%s",str[i]);
    k=0;
    str_len = strlen(str[i]);   //计数十六进制数长度 
    int ss = 4*str_len%3;         //判断转换后的二进制数数量是否为的倍数,如果不是,需要补0 
    char temp[4*str_len+3-ss];
    memset(temp,0,4*str_len+3-ss);
    if(ss == 1){
      strcat(temp,"00");
      k += 2;
    }
    if(ss == 2){
      strcat(temp,"0");
      k +=1;
    }
    /* 进行十六进制向二进制数的转换  */
        for(j=0;j<str_len;j++)
        {
            if(str[i][j]<65){
                temp[k++] = demo[str[i][j]-48][0];
                temp[k++] = demo[str[i][j]-48][1];
                temp[k++] = demo[str[i][j]-48][2];
                temp[k++] = demo[str[i][j]-48][3];
            }
            else if(str[i][j]>=65){
                temp[k++] = demo[str[i][j]-55][0];
                temp[k++] = demo[str[i][j]-55][1];
                temp[k++] = demo[str[i][j]-55][2];
                temp[k++] = demo[str[i][j]-55][3];
            }
        }
        temp[k] = 0;
        //进行输出操作
    for(j=0;j<4*str_len;j+=3)
    {
      if(j==0){
                result=(4*(temp[j]-48) + 2*(temp[j+1]-48) + (temp[j+2]-48));
                if( result != 0)
                printf("%d",result);
            }
            else{
            result=(4*(temp[j]-48) + 2*(temp[j+1]-48) + (temp[j+2]-48));
            printf("%d",result);
            }
    } 
    printf("\n");
  } 
  return 0;
}



相关文章
|
5月前
|
存储 C语言
C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句
C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句
|
C语言
C语言之将十进制整数转换为任意进制整数
C语言之将十进制整数转换为任意进制整数
230 0
|
C语言
C语言之十进制转化为十六进制
C语言之十进制转化为十六进制
141 0
|
19天前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
133 1
|
12天前
|
人工智能 算法 测试技术
2023年第15届蓝桥杯模拟赛第二期(c语言)
2023年第15届蓝桥杯模拟赛第二期(c语言)
|
3月前
|
存储 C语言
C语言18---常用的进制
C语言18---常用的进制
|
5月前
|
C语言
每天一道C语言编程(2^k进制数)
每天一道C语言编程(2^k进制数)
26 0
|
5月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 十六进制转十进制
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 十六进制转十进制
47 0
|
5月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
37 0
|
5月前
|
存储 算法 C语言
C语言练习记录(蓝桥杯练习)(小蓝数点)
C语言练习记录(蓝桥杯练习)(小蓝数点)