二进制转16进制
題目描述
給定一個二進制表示的非負整數,將其轉換為十六進制數。
要求使用函數編寫程序:函數原型如下:
voidconvert(char*input,char*output);
變量input為讀入的二進制字符串,變量output為函數中要輸出的十六進制字符串
輸入
輸入數據有多組,第一行為數據的組數T,接下來有T組數據。
每組數據占一行,每行為一個二進制整數(不含多余的前導0),最多1000位。
輸出
對于每組測試數據首先輸出"Case#:",#表示第幾組測試數據,接著輸出對應的十六進制數,字母用大寫表示,每組測試結果占一行。
樣例輸入
2
1111
10100100
樣例輸出
Case1:F
Case2: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, "
Case %d: ", i);
24 strcat(total, format);
25 strcat(total, output);
26 }
27
28 printf("%s
", 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進制數!
");
60 exit(0);
61 }
62 output[--pos]=sum;
63
64 }
65
66 }
View Code
總結
- 上一篇: 喝茶叶有什么好处(经常喝茶的人,有这几个
- 下一篇: 玉溪红色烟草扁盒细支多少钱?