华为机试】HJ5 进制转换"/>
【java华为机试】HJ5 进制转换
描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1 \le n \le 2^{31}-1 \1≤n≤231−1
注意本题有多组输入
输入描述:
输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子牛客网在线判题系统使用帮助_站内公告_牛客网处理多组输入的问题。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
import java.util.Scanner;
import java.lang.Math;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextLine()) {String str = in.nextLine();strToNum(str);}}public static void strToNum(String s) {// 设置一个数组,将16进制转换后的值存放在里面。数组从左到右,相当于位数从高到底。int[] nc = new int[s.length() - 2];// 将待求值的字符串转换成char的类型的数字,用于后面的遍历,遍历先将16进制转换成10进制的值,之后在进行按为计算求和,求出最终的16进制对应的10进制结果。char[] arr = s.toCharArray();// 第一次遍历,遍历开始的0x先去掉,从第三位开始遍历。for (int tc = 0; tc < s.length() - 2; tc++) {// 判断16进制是数字还是字母,将每一位的值都转换成10进制的值。if (arr[tc + 2] >= '0' && arr[tc + 2] <= '9') {nc[tc] = arr[tc + 2] - '0';} else if (arr[tc + 2] >= 'A' && arr[tc + 2] <= 'Z') {nc[tc] = arr[tc + 2] - 'A' + 10;} else if (arr[tc + 2] >= 'a' && arr[tc + 2] <= 'z') {nc[tc] = arr[tc + 2] - 'a' + 10;}}// 以上计算已经将16进制按位转换成10进制了。接下来就是求最后的结果。设置一个count变量,用于最后的统计求和。int count = 0;// 对nc数组的值进行遍历,求出最终的结果。for (int i = 0; i < nc.length; i++) {// 将第i位的值放置在临时变量countTmp中。int countTmp = nc[i];// 如果第i位的index在大于1的位置(除个位以外的高位),需要遍历index-1次,并且乘 16。for (int j = 0; j < nc.length - i - 1; j++) {countTmp = countTmp * 16;}count += countTmp;}System.out.println(count);}
}
输入:
0xA 0xAA
输出:
10 170
更多推荐
【java华为机试】HJ5 进制转换
发布评论