불로구
[ 자바 알고리즘/자료구조] - 자바 10진수 변환 (2진수 ~ N진수) 본문
이번에는 자바를 통해 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보다 작을 때 까지 감소시키며 출력한다.
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[ 자바 알고리즘/자료구조] - 자바 다차원배열 (0) | 2021.02.09 |
---|---|
[ 자바 알고리즘/자료구조] - 자바 소수 나열 ( 성능 개선버전 추가 ) (0) | 2021.02.09 |
[ 자바 알고리즘/자료구조] - 자바 배열 비교 (0) | 2021.02.08 |
[ 자바 알고리즘/자료구조] - 자바 난수배열 && 배열 역순 정렬 (0) | 2021.02.07 |
[ 자바 알고리즘/자료구조] - 자바 배열 복사 && 배열의 최대값 (0) | 2021.02.07 |