问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
第一种方法:
这个代码虽长,但内存使用较少:
| 详细记录 |
| 源代码 |
1
int main(void)
2
{
3
char Hex[8];
4
char str[33];
5
int len;
6
int i=0;
7
int j=0;
8
unsigned int res;
9
int base;
10
scanf("%s",Hex);
11
len = strlen(Hex);
12
while(Hex[i]!='\0')
13
{
14
switch(Hex[i])
15
{
16
case 'A':
17
strcpy(&str[j],"1010");
18
i++;
19
j+=4;
20
break;
21
case 'B':
22
strcpy(&str[j],"1011");
23
i++;
24
j+=4;
25
break;
26
case 'C':
27
strcpy(&str[j],"1100");
28
i++;
29
j+=4;
30
break;
31
case 'D':
32
strcpy(&str[j],"1101");
33
i++;
34
j+=4;
35
break;
36
case 'E':
37
strcpy(&str[j],"1110");
38
j+=4;
39
i++;
40
break;
41
case 'F':
42
strcpy(&str[j],"1111");
43
j+=4;
44
i++;
45
break;
46
case '0':
47
strcpy(&str[j],"0000");
48
j+=4;
49
i++;
50
break;
51
case '1':
52
strcpy(&str[j],"0001");
53
j+=4;
54
i++;
55
break;
56
case '2':
57
strcpy(&str[j],"0010");
58
j+=4;
59
i++;
60
break;
61
case '3':
62
strcpy(&str[j],"0011");
63
j+=4;
64
i++;
65
break;
66
case '4':
67
strcpy(&str[j],"0100");
68
j+=4;
69
i++;
70
break;
71
case '5':
72
strcpy(&str[j],"0101");
73
j+=4;
74
i++;
75
break;
76
case '6':
77
strcpy(&str[j],"0110");
78
j+=4;
79
i++;
80
break;
81
case '7':
82
strcpy(&str[j],"0111");
83
j+=4;
84
i++;
85
break;
86
case '8':
87
strcpy(&str[j],"1000");
88
j+=4;
89
i++;
90
break;
91
case '9':
92
strcpy(&str[j],"1001");
93
j+=4;
94
i++;
95
break;
96
}
97
}
98
base = --j;
99
while(j>=0)
100
{
101
int temp;
102
temp = str[j]-'0';
103
res += temp*pow(2,base-j);
104
j--;
105
}
106
printf("%u\n",res);
107
108
return 0;
109
}
|
这个代码稍微短一些,但内存使用较多
| 详细记录 |
| 源代码 |
1
#include <iostream>
2
using namespace std;
3
int main()
4
{
5
char hex_num[9];
6
cin>>hex_num;
7
int l; //十六进制数长度
8
long long dnum=0;
9
for(l=0;hex_num[l]!='\0';l++);
10
for(int i=l-1;i>=0;i--){ //位权展开法
11
int num;
12
long long weights=1; //权值
13
if('0'<=hex_num[i] && hex_num[i]<='9')
14
num=hex_num[i]-'0';
15
else if('A'<=hex_num[i] && hex_num[i]<='F')
16
num=hex_num[i]-'A'+10;
17
for(int j=l-i;j>1;j--)
18
weights*=16;
19
dnum+=num*weights;
20
}
21
cout<<dnum<<endl;
22
return 0;
23
}
|
博客探讨了两种将十六进制数值65535转换为十进制的方法,一种内存使用少但代码较长,另一种代码较短但内存使用较多。

8613

被折叠的 条评论
为什么被折叠?



