题目为输入一个十六进制,将其转换为三进制,解答如下
package com.bird.software;
import java.util.Stack;
public class TestConver {
public static int sixteenToTen(String num){
num = reString(num);
int sum = 0;
char temp;
int tempNum = 0;
for(int i = 0; i < num.length(); i++){
tempNum = 0;
temp = num.charAt(i);
switch(temp){
case 'A': tempNum = 10;break;
case 'B': tempNum = 11;break;
case 'C': tempNum = 12;break;
case 'D': tempNum = 13;break;
case 'E': tempNum = 14;break;
case 'F': tempNum = 15;break;
default: tempNum = temp - '0';
}
sum = (int) (sum + tempNum * Math.pow(16, i));
}
return sum;
}
public static String reString(String temp){
if(temp.length() == 1)return temp;
Stack<String> stack = new Stack<String>();
for(int i = 0; i < temp.length(); i++){
stack.push(String.valueOf(temp.charAt(i)));
}
StringBuffer str = new StringBuffer();
for(int i = 0; i <= stack.size()+1; i++)
str.append(stack.pop());
System.out.println("-----"+str.toString());
return str.toString();
}
public static String tenToThree(int num){
Stack<Integer> stack = new Stack<Integer>();
int temp;
int shang = 0;
while(true){
temp = num % 3;
shang = num /3;
stack.push(temp);
if(shang < 3){
stack.push(shang);
break;
}
num = shang;
}
StringBuffer sb = new StringBuffer();
for(int i = 0; i <= stack.size()+1; i++){
sb.append(stack.pop());
}
return sb.toString();
}
public static void main(String[] args) {
System.out.print("输入十六进制F对应三进制为 ");
System.out.println(tenToThree(sixteenToTen("F")));
System.out.println("---------------");
System.out.print("输入十六进制5对应三进制为 ");
System.out.println(tenToThree(sixteenToTen("5")));
}
}
输出结果为
输入十六进制F对应三进制为 120
---------------
输入十六进制5对应三进制为 12