VIRTUALS

the virtual labs for the virtuals

0%

HJ5. 进制转换

摘要:
一个简单的十六进制转十进制问题。

题目

描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

输入描述:
输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子https://www.nowcoder.com/discuss/276处理多组输入的问题。

输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例1

输入:
0xA
0xAA

输出:
10
170

十六进制转十进制

任意进制(设 $M$ 进制)转十进制:
先将 $M$ 种符号和对应的十进制一一对应起来。
答案初始化为零。
对于每一位 $M$ 进制符号,答案乘以 $M$ 再加上该位符号对应的十进制数。答案更新为上述值。

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
/*
* author:etoa
* 2021-08-15 02:00:53
*/
#include <bits/stdc++.h>

using namespace std;

unordered_map<char, int> hashmap = {{'A', 10}, {'B', 11},
{'C', 12}, {'D', 13},
{'E', 14}, {'F', 15}};

int main()
{
string s;
for (; getline(cin, s); ) {
int res = 0;
for (int i = 2, n = s.size(); i < n; i++) {
char c = s[i];
int x = isdigit(c) ? c - '0' : hashmap[c];
res = res * 16 + x;
}
cout << res << endl;
}
return 0;
}
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
28
29
/* 
* author: etoa
* 2021-08-15 02:18:44
*/
import java.util.*;

public class Main {
public static void main(String[] args) {
Map<Character, Integer> hash = new HashMap<>();
hash.put('A', 10);
hash.put('B', 11);
hash.put('C', 12);
hash.put('D', 13);
hash.put('E', 14);
hash.put('F', 15);
Scanner in = new Scanner(System.in);
for (; in.hasNext();) {
String s = in.next();
char[] chs = s.toCharArray();
int res = 0;
for (int i = 2, n = s.length(); i < n; i++) {
char c = chs[i];
int x = Character.isDigit(c) ? c - '0' : hash.get(c);
res = res * 16 + x;
}
System.out.println(res);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* author:atoa
* 2021-08-15 02:23:17
*/
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for (; in.hasNext(); ) {
String s = in.next();
System.out.println(Integer.valueOf(s.substring(2), 16));
}
}
}

原题链接: HJ5. 进制转换