给定n个十六进制正整数,输出它们对应的八进制数c语言实现
时间: 2023-05-31 17:02:09 浏览: 99
c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。
4星 · 用户满意度95%
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000 // 最大输入数目
#define MAX_LEN 10 // 最大十六进制数长度
// 十六进制转换为二进制
char* hexToBin(char hex){
switch(hex){
case '0': return "0000";
case '1': return "0001";
case '2': return "0010";
case '3': return "0011";
case '4': return "0100";
case '5': return "0101";
case '6': return "0110";
case '7': return "0111";
case '8': return "1000";
case '9': return "1001";
case 'A': return "1010";
case 'B': return "1011";
case 'C': return "1100";
case 'D': return "1101";
case 'E': return "1110";
case 'F': return "1111";
default: return "";
}
}
// 二进制转换为八进制
char* binToOct(char* bin){
int len = strlen(bin);
char* oct = malloc(sizeof(char) * (len / 3 + 2));
int i, j;
for(i = 0, j = 0; i < len; i += 3, j++){
if(i + 2 < len){
oct[j] = (bin[i] - '0') * 4 + (bin[i + 1] - '0') * 2 + (bin[i + 2] - '0') + '0';
}
else if(i + 1 < len){
oct[j] = (bin[i] - '0') * 2 + (bin[i + 1] - '0') + '0';
}
else {
oct[j] = bin[i];
}
}
oct[j] = '\0';
return oct;
}
// 主函数
int main(){
int n;
char hex[MAX_N][MAX_LEN];
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%s", hex[i]);
char* bin = malloc(sizeof(char) * (strlen(hex[i]) * 4 + 1));
for(int j = 0; j < strlen(hex[i]); j++){
strcat(bin, hexToBin(hex[i][j]));
}
printf("0%o\n", atoi(binToOct(bin)));
free(bin);
}
return 0;
}
阅读全文