진법 변환

  • Q. 주어진 N값을 2~9진법으로 변환해서 출력하시오.
  • 자바 라이브러리에서 2진법, 8진법, 16진법으로 변환시켜주는 라이브러리가 있다.
    • Integer.toBinaryString(int i), Integer.toOctalString(int i), Integer.toHexString(int i)
  • 라이브러리를 사용하지 않고 직접 진법을 변환시켜주는 알고리즘을 짜보자
    • ex) N을 10으로 가정하고, 2진법으로 변환시켰을 때 일어나는 과정을 살펴보자
      • 10을 2로 나눈 몫(=5)과 10을 2로 나눈 나머지(=0)를 구한 후 나머지값을 String(=”0”)에 적는다.
      • 위에서 나온 몫(=5)에서 다시 2로 나눠 몫(=2)과 나머지(=1)를 구한다. 그리고 나머지 값을 String의 앞(=”10”)에 적는다.
      • N값이 1보다 작아질 때까지 위 과정을 반복한다.
  • 위 알고리즘의 시간복잡도는 진수의 지수만큼 나눠지기 때문에 log(N) 이다.
package coupang;

public class 진법변환 {
	public static void main(String[] args) {
		진법변환 ch = new 진법변환();
		int N = 10;
		ch.solution(N);
	}
		
	public void solution(int N) {
		for (int i = 2; i < 10; i++) {
			System.out.println(N + "을 " + i + "진법으로 변환했을 시 : " + pow(N, i));
		}
		
	}
	
	public String pow(int n, int exp) {
		String str = "";
		while(n >= 1) {
			int share = n / exp; // 몫
			int remain = n % exp; // 나머지
			str = (Integer.toString(remain) + str);
			n = share;
		}
		return str;
	}
	
}

convert_number