二进制转16进制

题目描述
给定一个二进制表示的非负整数,将其转换为十六进制数。
要求使用函数编写程序:函数原型如下:
void convert( char *input, char *output);
变量input为读入的二进制字符串,变量output为函数中要输出的十六进制字符串

输入
输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。

输出
对于每组测试数据首先输出"Case #: ",#表示第几组测试数据,接着输出对应的十六进制数,字母用大写表示,每组测试结果占一行。 

样例输入

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 }
View Code

 




posted @ 2019-11-14 11:05  不折不扣  阅读(1563)  评论(0编辑  收藏  举报