进制转换简单实现代码

代码原理,里面用栈实现的

class Stack {
	int top = 0;
	int[] array = null;
	
	public Stack() {
		this(10);
	}
	
	public Stack(int size) {
		this.top = 0;
		this.array = new int[size];
	}
	
	public boolean isFull() {
		return (top == array.length);
	}
	
	public void put(int x) {
		if(isFull()) { //如果栈满了,就扩容
			this.array = Arrays.copyOf(array, array.length*2);
		}
		array[top] = x;
		top++;
	}
	
	/**
	 * 因为2进制、8进制、10进制数每个数都不会大于10,所以如果输出大于10的数必为16进制数
	 * 而在16进制数中,10~15依次用A B C D E F表示
	 */
	public void show() {  
		for(int i = top-1;i >= 0;i--) {
			if(array[i] < 10) {
				System.out.print(array[i]);
			}else {
				if(array[i] == 10) {
					System.out.print("A");
				}
				if(array[i] == 11) {
					System.out.print("B");
				}
				if(array[i] == 12) {
					System.out.print("C");
				}
				if(array[i] == 13) {
					System.out.print("D");
				}
				if(array[i] == 14) {
					System.out.print("E");
				}
				if(array[i] == 15) {
					System.out.print("F");
				}
			}
		}
		System.out.println();
	}
}

public class TransitionNumber {

	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		for(;;) {
		System.out.print("输入待转换的数的进制:  ");
		int x = sc.nextInt();
		
		System.out.print("输入需要转换后的进制:  ");
		int y = sc.nextInt();
		
		System.out.print("请输入需要转换的数:   ");
		int i = sc.nextInt();
		
        if(!judge(x,i)) {
			System.out.println("你输入的不是"+x+"进制数,"+x+"进制数每个数应该小于"+x);
			continue;
		}
		System.out.print(x+"进制数"+i+"转换为"+y+"进制数后为:  ");
		decimalTooctonary(y,octonaryTodecimal(x,i)).show();
		}
	}
	

	/**
	 * 判断输入的进制数是否正确
	 * @param x
	 * @param i
	 * @return
	 */
	private static boolean judge(int x, int i) {
		String str = String.valueOf(i);  //基本数据类型转字符串
		char[] cha = str.toCharArray();  //字符串转换成字符数组
		int cur = x;
		if(x == cur) {
			for(int j = 0;j < cha.length;j++) {
				//字符数组里的每个元素转成int型参与比较
				if(Integer.parseInt(cha[j]+"") > cur-1) {  
					return false;
				}
			}
		}
		
		return true;
	}

	/**
	 * 其他进制转十进制
	 * @param x
	 * @param i
	 * @return
	 */
	private static int octonaryTodecimal(int x,int i) {
		int n = i;
		int m = i;
		int num = 0;
		int b = (int) b(i);
		int a = (int) Math.pow(10, b);
		while(a >= 1) {
			n = m/a;
			m = m%a;
			a = a/10;
			num = n+num*x;
		}
		return num;
		
	}

	/**
	 * 
	 * @param i
	 * @return
	 */
	private static double b(int i) {
		int n = i;
		int b = 0;
		while(n/10 != 0) {
			n = n/10;
			b++;
		}
		return b;
	}

	/**
	 * 十进制转其他进制
	 * @param i
	 * @return 
	 */
	private static Stack decimalTooctonary(int y,int i) {
		Stack x = new Stack();
		int n = i;
		while(true) {
			if(n/y != 0) {
				x.put(n%y);
				n = n/y;
			}else {
				x.put(n);
				return x;
			}
		}
    }
}


运行结果:

输入待转换的数的进制:  16
输入需要转换后的进制:  8
请输入需要转换的数:   544
16进制数 【544】 转换为8进制数后为:  2504
输入待转换的数的进制:  8
输入需要转换后的进制:  2
请输入需要转换的数:   2504
8进制数 【2504】 转换为2进制数后为:  10101000100
输入待转换的数的进制:  8
输入需要转换后的进制:  10
请输入需要转换的数:   2504
8进制数 【2504】 转换为10进制数后为:  1348
输入待转换的数的进制:  8
输入需要转换后的进制:  16
请输入需要转换的数:   10700
8进制数 【10700】 转换为16进制数后为:  11C0
输入待转换的数的进制:  2
输入需要转换后的进制:  10
请输入需要转换的数:   2536
你输入的不是2进制数,2进制数每个数应该小于2
输入待转换的数的进制:  2
输入需要转换后的进制:  10
请输入需要转换的数:   10010
2进制数 【10010】 转换为10进制数后为:  18
输入待转换的数的进制:  2
输入需要转换后的进制:  8
请输入需要转换的数:   10010
2进制数 【10010】 转换为8进制数后为:  22
输入待转换的数的进制:  10
输入需要转换后的进制:  8
请输入需要转换的数:   18
10进制数 【18】 转换为8进制数后为:  22
输入待转换的数的进制:  

进制转换简单实现代码_第1张图片

你可能感兴趣的:(常见问题的解决代码,进制转换)