牛客:华为研发工程师编程题 第三题
3.进制转换
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。数据范围:保证结果在 1 ≤ n ≤ 2 31 2^{31} 231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入例子:
0xAA
输出例子:
170
题解
思路:模拟16进制转10进制计算方法。
import java.util.*;
public class Main {
public static int decimal(char c) {
//16进制保存为数组
char[] n = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
for (int i = 0; i < n.length; i++) {
if (Character.toUpperCase(c) == n[i])
return i;
}
return 0;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String str = in.nextLine();
String[] s1 = str.split("0x");
//System.out.println(s1[1]);
char[] c1 = s1[1].toCharArray();
int len = s1[1].length();
int sum = 0;
for (int i = 0; i < len; i++) {
int n = decimal(c1[i]);
System.out.println(n);
sum += n * (int) Math.pow(16, len - 1 - i);//乘以16的几次幂
}
//System.out.println(sum);
}
in.close();
}
}