本周我对进制转化类的算法进行了练习,总结了一些进制之间的转换方法。
十进制转换为十六进制
import java.util.Scanner;
public class jinzhi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
String s = "";
while(k>=16) {
int i = k%16;
k = k/16;
if(i<16&&i>9) {
switch(i) {
case 10:
s = s+"A";
break;
case 11:
s = s+"B";
break;
case 12:
s = s+"C";
break;
case 13:
s = s+"D";
break;
case 14:
s = s+"E";
break;
case 15:
s = s+"F";
break;
}
}
else if(i<=9) {
s = s+i;
}
}
if(k<16&&k>9) {
switch(k) {
case 10:
s = s+"A";
break;
case 11:
s = s+"B";
break;
case 12:
s = s+"C";
break;
case 13:
s = s+"D";
break;
case 14:
s = s+"E";
break;
case 15:
s = s+"F";
break;
}
}
else if(k<=9) {
s = s+k;
}
char[] a = s.toCharArray();
for(int i = s.length()-1;i>=0;i--) {
System.out.print(a[i]);
}
}
}
十六进制的数分别是:
0-----0;1-----1;2-----2;3-----3;4-----4;5-----5;6-----6;7-----7;8-----8;9-----9;A-----A;B-----B;C-----C;D-----D;E-----E;F-----F;
这个方法比较好理解,就是将输入的数一直除以16求每次除以16后的余数,直到最后的数小于16,那么最后的数分别对应16进制的某个数这样最后将所求的余数反过来就得到了转换后的十六进制数;
例如:254————
254/16=15·······14;//14对应的字母是E
15/16=0········15;//15对应的字母是F
反过来读就是FE,这样就将十进制转换为了十六进制;
十六进制转换为十进制
import java.util.Scanner;
public class jinzhi2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
long b = Long.parseLong(a,16);
System.out.println(b);
}
}
利用parseLong(String s,int a)方法将a进制转换为十进制(默认);
各进制之间的转换
/*十六进制转换为十进制,再将十进制转换为八进制,也可以直接转换,
但是我的的水平比较菜,还没有想到如何将进制之前的标识符在输入进
制的时候自动带上,毕竟输入的时候不会让输入者来输入这些标识符。*/
import java.util.Scanner;
public class jinzhi3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] a = new String[n];
String[] b = new String[n];
int[] c = new int[n];
for(int i=0;i<n;i++) {
a[i] = sc.next();
c[i] = Integer.parseInt(a[i],16);
b[i] = Integer.toOctalString(c[i]);
}
for(int j=0;j<n;j++) {
System.out.println(b[j]);
}
}
}
Java中不同进制的前面的标识符,有了标识符就代表该进制:
①二进制: 以0b开头
②八进制: 以0开头
③十进制: 正常的0~9
④十六进制: 以0x开头:0~9,a,b,c,d,e,f
Integer.toBinaryString(int i)
将int类型的变量转换为二进制,需要将i前面加入标识符;
Integer.toOctalString(int i)
将int类型的变量转换为八进制,需要将i前面加入标识符;
Integer.toHexString(int i)
将int类型的变量转换为十六进制,需要将i前面加入标识符;