十进制到十六进制
按除16取余倒数
利用栈向进后出的特性
每得出一个余数将他押入栈中,并将该数除以16送入下一论循环
public class DecToHex {
public static void main(String[] args) {
int num = 991355;
ArrayStack<String> stack = new ArrayStack<>();
while (num!=0){
int a =num%16;
if (a<10) {
stack.push(a + " ");
}else {
stack.push((char)(a+55)+" ");
}
// }else if(a == 10){
// stack.push("A");
// }else if (a == 11){
// stack.push("B");
// }else if (a == 12){
// stack.push("C");
// }else if(a == 13){
// stack.push("D");
// }else if (a == 14){
// stack.push("E");
// }else if(a == 15){
// stack.push("F");
// }
num = num/16;
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()){
sb.append(stack.pop());
}
String Result = sb.toString();
System.out.println(Result);
}
}
十六进制转十进制
例: 9FBF1
将该数压入栈重
对弹栈的每一个(按顺序从0到n-1个)数累加求对应16次幂的和
代码实现:
public class HEXTODEX {
public static void main(String[] args) {
String hex= "9FBF1";
ArrayStack<Character> stack = new ArrayStack<>();
for (int i = 0;i<hex.length();i++){
stack.push(hex.charAt(i));
}
int sum =0;
int mi = 0;
while (!stack.isEmpty()){
char c = stack.pop();
sum+= getNumber(c)*Math.pow(16,mi);
mi++;
}
System.out.println(sum);
}
private static int getNumber(char c) {
if (!(c>='0'&&c <='9'||c>='A' && c<='F')){
throw new IllegalArgumentException("Wrong char!");
}
if (c>='0'&&c<='9'){
return c-'0';
}else {
return c-'A'+10;
}
}
}