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의 마지막 반복문에는 배열을 역순으로 읽는다.