二进制转16进制
题目描述
给定一个二进制表示的非负整数,将其转换为十六进制数。
要求使用函数编写程序:函数原型如下:
void convert( char *input, char *output);
变量input为读入的二进制字符串,变量output为函数中要输出的十六进制字符串
输入
输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。
输出
对于每组测试数据首先输出"Case #: ",#表示第几组测试数据,接着输出对应的十六进制数,字母用大写表示,每组测试结果占一行。
样例输入
2
1111
10100100
样例输出
Case 1: F
Case 2: A4
提示
5 = '5' - '0';
1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 #include <stdlib.h> 5 void convert( char *input, char *output); 6 7 int main(int argc, char const *argv[]) 8 { 9 int T; 10 int i; 11 char input[1000]= {0}; 12 char output[256]= {0}; 13 char format[32] = {0}; 14 char total[1024] = {0}; 15 scanf("%d",&T);//多组输入 16 17 for(i=0;i<T;i++) 18 { 19 fflush(stdin); 20 gets(input); 21 convert(input,output); 22 23 sprintf(format, "\nCase %d: ", i); 24 strcat(total, format); 25 strcat(total, output); 26 } 27 28 printf("%s\n", total); 29 30 return 0; 31 } 32 void convert( char *input, char *output) 33 { 34 int len = strlen(input); 35 int pos=len/4+1; 36 int j=0; 37 int i=0; 38 int sum=0; 39 if(len%4==0) 40 { 41 pos=pos-1; 42 } 43 while(len>0) 44 { 45 sum=0; 46 for(i=0;i<4&&len>0;i++,len--) 47 { 48 49 sum=sum+(input[len-1]-'0')*pow(2,i); 50 } 51 //转成16进制字符 52 sum = sum + '0'; 53 if(sum>'9'&&sum<='9'+7) 54 { 55 sum=sum+7; 56 } 57 else if(sum>'9'+7) 58 { 59 printf("您输入的不是正确的2进制数!\n"); 60 exit(0); 61 } 62 output[--pos]=sum; 63 64 } 65 66 }