思路
1.使用字符数组存储十进制数字
2.从个位开始,利用/16及%16,更新当前number及余数,注意处理16进制的10-15与A-F的转换。
3.因为需要反转字符串,所以建立字符串缓冲池存储。
4.注意十六进制的固定格式是 开头必加上0X。
代码
package leetcode; import java.util.Scanner; public class 进制转换_10转16 { public static void main(String[] args) { //十进制转为16进制 Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int number = sc.nextInt();//获取输入的数字 char[] ch= new char[(number + "").length()];//获取数int类型字位数的方法 int nindex = 0;//字符串数组更新的位置 while(true) { int m = number/16;//减掉余数 int k = number%16;//取余 if(k == 10) { ch[nindex] = 'A'; } if(k == 11) { ch[nindex] = 'B'; } if(k == 12) { ch[nindex] = 'C'; } if(k == 13) { ch[nindex] = 'D'; } if(k == 14) { ch[nindex] = 'E'; } if(k == 15) { ch[nindex] = 'F'; } if((k>=0)&&(k<10)) {//如果k为0-9 ch[nindex] = (char)('0'+k);//技巧:将数字转为char形式存入char[]字符串数组ch } nindex++;//更新字符串数组位置(注意是从个位开始存入,结果最重要反转 if(m == 0) break;//如果这个数已经为0,则跳出循环 number = m;//如果m还没为0,则更新number } StringBuffer sb = new StringBuffer();//建立字符串缓冲池sb sb.append(ch, 0, nindex);//将ch中从索引0开始一直到index-1的字符加入sb //注意sb.append(char[] str,int offset,int len)方法和sb.append(String str,int start,int end)的区别 sb.reverse();//反转字符串缓冲池 String ans = "0x";//十六进制固定格式:开头必有0x ans = ans + sb.toString(); System.out.println(ans); } } }
笔记
1.将数字int转为字符形式char。
int k = 5; char n = (char)('0' + k);//将数字转为字符格式 char m = (char)('k'); char w = 'k'; System.out.println(n); System.out.println(m); System.out.println(w);
运行结果:
5 k k
2.StringBuffer的append(a,b,c)方法
(1) sb.append(char[] str, int offset, int len)
将字符数组从索引offset开始的len长度的字符加入sb。
(2) sb.append(String s, int start, int end)
将字符串s从索引start开始到索引end(不包括end)加入sb。
public class StringBuffer_append方法 { public static void main(String[] args) { StringBuffer sb1 = new StringBuffer("Hard "); StringBuffer sb2 = new StringBuffer("Hard "); char[] ch = new char[]{'W','a','x','w','o','r','k','s'}; sb1.append(ch,3,4); System.out.println("第一个位置为字符数组名时,结果为:" + sb1); String s = "Waxworks"; sb2.append(s,3,4); System.out.println("第一个位置为字符串时,结果为:" + sb2); } }
运行结果:
第一个位置为字符数组名时,结果为:Hard work 第一个位置为字符串时,结果为:Hard w