蓝桥杯:基础练习 十六进制转十进制

基础练习 十六进制转十进制  
时间限制:1.0s   内存限制:512.0MB
       
问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
分析题目,将十六进制转换为十进制,其中十六进制字符串不超过8位,首先想到调用系统方法实现。直接利用Integer.valueOf(hexStr, 16).toString()方法实现,测试输出错误,超出Integer类型长度范围,因此改为Long.valueOf(hexStr, 16).toString(),测试通过。

import java.util.Scanner;

public class Main{
	public static void transform() {
		Scanner sc = new Scanner(System.in);
		String arry = "";
		String number = sc.next();
		if (number.length() <= 8) {
			arry = Long.valueOf(number, 16).toString();
		}
		System.out.println(arry);
	}

	public static void main(String[] args) {
		transform();
	}
}

之后自己又写了实现算法:首先将十六进制转换为二进制,一位十六进制转换为4位二进制。再将二进制转换为十进制,从右往左,遇到为1的位,累加上2的n-1次方,测试通过。

import java.util.Scanner;

public class Main{
	
	public static void convertHexIntoDecimal(char[] arryHex, String hexStr){
		StringBuilder binaryStb = new StringBuilder();
		int len = hexStr.length();
		long count = 1;
		long decimal = 0;
		String binaryStr = "";
		arryHex = hexStr.toCharArray();
		for (int i = 0; i < len; i++) { //Convert Hex into Binary
			switch (arryHex[i]) {
			case '0':
				binaryStb.append("0000");
				break;
			case '1':
				binaryStb.append("0001");
				break;
			case '2':
				binaryStb.append("0010");
				break;
			case '3':
				binaryStb.append("0011");
				break;
			case '4':
				binaryStb.append("0100");
				break;
			case '5':
				binaryStb.append("0101");
				break;
			case '6':
				binaryStb.append("0110");
				break;
			case '7':
				binaryStb.append("0111");
				break;
			case '8':
				binaryStb.append("1000");
				break;
			case '9':
				binaryStb.append("1001");
				break;
			case 'A':
				binaryStb.append("1010");
				break;
			case 'B':
				binaryStb.append("1011");
				break;
			case 'C':
				binaryStb.append("1100");
				break;
			case 'D':
				binaryStb.append("1101");
				break;
			case 'E':
				binaryStb.append("1110");
				break;
			case 'F':
				binaryStb.append("1111");
				break;
			default:
				break;
			}
		}
		binaryStr = binaryStb.toString();
		len = binaryStr.length();
		for(int i = len - 1; i >= 0; i--){
			if(binaryStr.charAt(i) == '1'){
				decimal = decimal + count;
				
			}
			count = count * 2;
		}
		System.out.println(decimal);
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char [] arryHex = new char[8];
		String hexStr = sc.next();
		convertHexIntoDecimal(arryHex,hexStr);
	}
}




你可能感兴趣的:(蓝桥杯)