Computer Science/Algorithm

[기본 알고리즘/자료구조] 기수 변환하기 (N진수로 변환)

simDev1234 2022. 5. 31. 18:02

|  개념

기수란? 수를 나타내는 데 기초가 되는 수. 

- 10진법에서는 0~9까지의 정수를 말하며, 2진법에서는 0~1까지 정수를 말한다.

 

|  기수 변환을 수행하는 프로그램

package _00_두잇;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class _01_기수변환 {
    //정수값 x를 r로 변환하여 배열 d에 아랫자리부터 넣어두고 자릿수를 반환한다.
	static int convert(int x, int r, char[] d) {
		int digits = 0;
		String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		
		//배열 안에 나눈 나머지를 하나씩 넣는다 
		while (x != 0) {
		  d[digits++] = dchar.charAt(x % r);
		  x = x / r;
		} 
		
		//배열의 역순이 변환한 진수값이다.
		for (int i = 0; i < digits/2; i++) {
			char tmp = d[i];
			d[i] = d[digits-1-i];
			d[digits-1-i] = tmp;
		}
		
		//변환한 수의 자릿수
		return digits;
		
	}
	
	public static void main(String[] args) throws Exception{
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		//변환하려는 수
		int num;
		//기수
		int jin;
		//변환한 수의 자릿수
		int digits;
		//변환 후 각 자리의 숫자를 넣어주는 문자 배열
		char[] cvArr = new char[32];
		
		System.out.print("변환하려는 수 : ");
		
		num = Integer.parseInt(reader.readLine());
		
		System.out.print("자릿수(2~36) : ");
		
		jin = Integer.parseInt(reader.readLine());
		
		digits = convert(num, jin, cvArr);
		
		System.out.print(jin+"진수로 ");
		for (int i = 0; i < digits; i++) {
			System.out.print(cvArr[i]);
		}
		System.out.print("입니다.\n");
		
	}
}

>> 결과

변환하려는 수 : 35
자릿수(2~36) : 2
2진수로 100011입니다.

 

[출처]

[자료구조와 함께 배우는 알고리즘 입문], BohYoh Shibata지음