7-14 十六进制转十进制
mirco-akira
7-14 十六进制转十进制 分数 5 作者 李祥 单位 湖北经济学院
请编写程序,输入十六进制数,输出对应的十进制数。
输入格式
十六进制非负整数
输出格式
对应的十进制非负整数
输入样例
13Ba
输出样例
5050
代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
# 代码:
# 方法1:
#include <stdio.h>
int main(){
unsigned int hex_str; //因为%x,这里必须使用 unsigned
scanf("%x",&hex_str); //%x 相当与将输入的内容,以16进制的形式接收
printf("%d",hex_str);
//为何可以使用这种方法,具体请看下方 解题思路
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 方法2:
#include·<stdio.h>
int·main()
{
····char·s[50];
····//定义字符变量char
····scanf("%s",&s);
····int·t;
····long·sum·=·0;
//定义long int型变量
····for(int·i·=·0;·s[i];·i++)
····{
········if(s[i]·<=·'z'·&&·s[i]·>=·'a'){
············t·=·s[i]·-·'a'·+·10;
············//'a'的ascill码是97,加上10是10以上的数的真正数字
········}else·if(s[i]·<=·'Z'·&&·s[i]·>=·'A'){
············t·=·s[i]·-·'A'·+·10;
············//'A'的ascill码是65,加上10是10以上的数的真正数字
········}else{
············t·=·s[i]·-·'0';
············//'0'的ascill码是48,加上10是10以下的数的真正数字
········}
········sum·=·sum·*·16·+·t;
········//十六进制转换和真正的数字
····}
····printf("%ld",sum);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 解题思路:
方法1:
- 首先要明白什么是16进制, 16进制:0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)
- 使用格式化输出符号%x进行接收,%x就是接收16进制的内容
- 然后最后使用%u进行输出,即转换为10进制
方法2:
- step 1:输入十六进制数;
- step 2:通过ascill码将'a'转换97再加上10以上的数的真正数字;
- step 3:通过ascill码将'A'转换65再加上10以上的数的真正数字;
- step 4:通过ascill码将'A'转换65再加上10以上的数的真正数字;
- step 5:通过ascill码将'0'转换48再加上10以下的数的真正数字;
- step 6:将十六进制转换和真正的数字相加就是最后的十进制数。
归属知识点:
方法1: 格式化输出符号
方法2: 选择和循环结构,进制转换