蓝桥杯:十进制转十六进制

933 阅读1分钟

解析: 这题一开始试了几种方法都有点啰嗦,后来学习了其他人的方法,我发现从十六进制转十进制逆推出十进制转十六进制会很简便。比如十六进制的11,(个位数)1+(十六位数)1*16=17。

下面是具体的思路,主要用到了%、/、不同进制间的关系、整型Int的特点等知识点。

直接上图:下面是17,255,256三个十进制数转成十六进制的分析

橙色字体部分就是将一个十进制数拆开后转换成的十六进制数,将转换后的结果从后往前加起来就是最终的结果了。

package _3_5_test;

import java.util.Scanner;

import _12_26_test.eleven;

/*
 * 十进制转十六进制
 * 关键两步:
 * a%16
 * a/16
 * */
public class ThirtySix {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner = new Scanner(System.in);

		int Inte = scanner.nextInt();

		StringBuffer hexa = new StringBuffer();
		
//		如果接收到的十进制数是0,直接输出十六进制的0
		if (Inte == 0) {
			hexa.append("0");
			System.out.println(hexa);
		} else {
			while (Inte > 0) {
				hexa = hexa.append(toHexa(Inte % 16));
				Inte /= 16;
			}
//			将字符串进行反向排列
			hexa = hexa.reverse();
			System.out.println(hexa);
		}

	}

//	自定义一个将十进制数转换成16进制数的方法
	public static String toHexa(int i) {

		String s = "";
		switch (i) {
		case 0:
			s = "0";
			break;
		case 1:
			s = "1";
			break;
		case 2:
			s = "2";
			break;
		case 3:
			s = "3";
			break;
		case 4:
			s = "4";
			break;
		case 5:
			s = "5";
			break;
		case 6:
			s = "6";
			break;
		case 7:
			s = "7";
			break;
		case 8:
			s = "8";
			break;
		case 9:
			s = "9";
			break;
		case 10:
			s = "A";
			break;
		case 11:
			s = "B";
			break;
		case 12:
			s = "C";
			break;
		case 13:
			s = "D";
			break;
		case 14:
			s = "E";
			break;
		case 15:
			s = "F";
			break;
		default:
			break;
		}
		return s;

	}

}