Algorithm&Data Structure
[Algorithm] 기수 변환 프로그램
oneH
2024. 11. 19. 22:23
사용자에게 양의 정수값을 입력받고, 변환하고 싶은 진수를 정수로 입력받는다.
그리고 정수n을 입력받아 n을 사용자가 원하는 진수로 변환하는 프로그램을 만들고자 한다.
package binaryProgram;
class DivideNum {
String fillTheCharArr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
divideNum() {
}
int divideNum(int number, int divide, char[] cArr) {
int digits = 0;
do {
cArr[digits++] = fillTheCharArr.charAt(number % divide);
number /= divide;
} while (number != 0);
return digits;
}
}
진수변환 알고리즘이 존재하는 Divide class
package binaryProgram;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
DivideNum dnum = new DivideNum();
Scanner sc = new Scanner(System.in);
int num;
int divideNum;
int numberLength;
int rePlay = 0;
System.out.println("10진수를 기수 변환합니다.");
char[] cno = new char[32];
do {
do {
System.out.print("변환하고 싶은 음이 아닌 정수: ");
num = sc.nextInt();
} while (num < 0);
do {
System.out.print("어떤 진수로 변환할까요?: ");
divideNum = sc.nextInt();
} while (divideNum < 2 || 36 < divideNum);
numberLength = dnum.divideNum(num, divideNum, cno);
System.out.print(divideNum + "진수로는: ");
for (int i = numberLength - 1; i >= 0; i--) {
System.out.print(cno[i] + "");
}
System.out.print("\n한번 더 할까요?");
rePlay = sc.nextInt();
} while (rePlay != 0);
}
}
Main method가 존재하는 Main class
알고리즘 간략하게 설명
문자열 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"을 선언한다.
해당 문자열은 나중에 쓰일것이다.
정수 N 을 변환하고 하는 진수 m으로 계속 나눈다 0이 될 때 까지 N/=M
N%M의 값은 배열[i++]=문자열.charAt(N%M)
다시 정리하자면 해당 프로그램은 2~36진수변환 해주는 프로그램이다.
16진수로 예를 들면 0123456789ABCDEF이다.
36진수까지는 0~Z까지 이므로 문자열은 0~Z까지 초기화한 것 이다.
charAt(N%M)은 N이 59이고, M이 16 즉, 59의 16진수값을 구한다면
59%16=11
문자열의 11번째 값은 "B"이므로 B가 배열에 저장된다.
진수 변환한 값을 읽을 때는 반대로 읽으므로 main method의 마지막 반복문에는 배열을 역순으로 읽는다.
