불로구

[ 자바 알고리즘/자료구조] - 자바 10진수 변환 (2진수 ~ N진수) 본문

프로그래밍/알고리즘

[ 자바 알고리즘/자료구조] - 자바 10진수 변환 (2진수 ~ N진수)

맹이맹이 2021. 2. 8. 01:14
반응형

이번에는 자바를 통해 10진수를 원하는 진수로 변환해보자.

 

class Jinsu{
	public int trans(int num, int jinsu, char[] result){
		int i=0;
		String list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		do{
			result[i] = list.charAt(num % jinsu);
			num /= jinsu;
			i++;
		}while(num != 0);
		return i;
	}
}

public class 기수변환 {
	public static void main(String[] args){
		Scanner s = new Scanner(System.in);
		int num = s.nextInt();
		int jinsu = s.nextInt();
		char result[] = new char[32];
		Jinsu j = new Jinsu();
		int index = j.trans(num, jinsu, result);
		
		for(int i=index-1; i>=0; i--){
			System.out.print(result[i]);
		}
	}
}

 

Jinsu class부터 살펴보자

- 우선 Jinsu 클래스의 trans 메서드는 num (10진수), jinsu (원하는 진수), result ( 변환된 값을 담을 배열)을 파라미터로 받는다.

- 메서드의 리턴타입을 int로 한 이유 -> i라는 값을 통해 불필요한 출력을 막아버린다.

 ( result.length - 1 로 시작할경우 xxxxxxxxxxxxx10010이 출력된다 )

- 문자열 list 변수는 0~z까지 값을 저장한다

 ( 왜? -> 16진수 이후부터는 숫자 9까지로 표현이 어렵기 때문에 알파벳으로 나타내기 때문 )

- do ~ while을 통해 num이 0이 아닐때까지 반복한다.

- result[i]에 대입하는 값을 보자 -> charAt(int index)란 문자열 index 요소 하나를 빼온다 ( 인덱스는 0부터 시작)

  -> 즉, num이 34이고 jinju가 2라고 가정하면 list.char(34 % 2) = list.char(0) -> list의 0번째 -> 0이 된다.

- num을 다시 jinsu로 나눈 값을 대입하고 i를 증가시킨다.

- 이렇게 반복을하다 num이 0이되면 i를 반환해준다.

 

기수변환 class를 살펴보자

- num과 jinsu 각 원하는 값을 넣어준다.

- 32크기의 Character타입 배열을 생성한다. -> 여기에는 변환된 값을 담을거다.

- 우선 Jinsu 클래스의 trans 메서드를 사용하기 위한 Jinsu 클래스를 가리키는 j라는 객체를 생성한다.

- index의 값을 Jinsu 클래스의 trans메서드 반환값을 대입한다.

 ( trans 메서드를 생성할때 작성한 파라미터에 맞게 아규먼트를 날려준다 )

- for문을 보자 여기서 trans 메서드의 리턴타입을 int로 지정한 이유가 나타난다.

  -> 배열에는 저장할때 큰수부터 작은수 순서대로 처리하기 때문에 앞자리부터 저장이된다.

  -> 그렇기 때문에 출력은 반대로 해주어야한다.

  -> index - 1부터 0보다 작을 때 까지 감소시키며 출력한다.

반응형
Comments